61 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
import taos
 | 
						|
from datetime import datetime
 | 
						|
 | 
						|
# note: lines have already been sorted by table name
 | 
						|
lines = [('d1001', '2018-10-03 14:38:05.000', 10.30000, 219, 0.31000, 'Beijing.Chaoyang', 2),
 | 
						|
         ('d1001', '2018-10-03 14:38:15.000', 12.60000, 218, 0.33000, 'Beijing.Chaoyang', 2),
 | 
						|
         ('d1001', '2018-10-03 14:38:16.800', 12.30000, 221, 0.31000, 'Beijing.Chaoyang', 2),
 | 
						|
         ('d1002', '2018-10-03 14:38:16.650', 10.30000, 218, 0.25000, 'Beijing.Chaoyang', 3),
 | 
						|
         ('d1003', '2018-10-03 14:38:05.500', 11.80000, 221, 0.28000, 'Beijing.Haidian', 2),
 | 
						|
         ('d1003', '2018-10-03 14:38:16.600', 13.40000, 223, 0.29000, 'Beijing.Haidian', 2),
 | 
						|
         ('d1004', '2018-10-03 14:38:05.000', 10.80000, 223, 0.29000, 'Beijing.Haidian', 3),
 | 
						|
         ('d1004', '2018-10-03 14:38:06.500', 11.50000, 221, 0.35000, 'Beijing.Haidian', 3)]
 | 
						|
 | 
						|
 | 
						|
def get_ts(ts: str):
 | 
						|
    dt = datetime.strptime(ts, '%Y-%m-%d %H:%M:%S.%f')
 | 
						|
    return int(dt.timestamp() * 1000)
 | 
						|
 | 
						|
 | 
						|
def create_stable():
 | 
						|
    conn = taos.connect()
 | 
						|
    try:
 | 
						|
        conn.execute("CREATE DATABASE power")
 | 
						|
        conn.execute("CREATE STABLE power.meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) "
 | 
						|
                     "TAGS (location BINARY(64), groupId INT)")
 | 
						|
    finally:
 | 
						|
        conn.close()
 | 
						|
 | 
						|
 | 
						|
def bind_row_by_row(stmt: taos.TaosStmt):
 | 
						|
    tb_name = None
 | 
						|
    for row in lines:
 | 
						|
        if tb_name != row[0]:
 | 
						|
            tb_name = row[0]
 | 
						|
            tags: taos.TaosBind = taos.new_bind_params(2)  # 2 is count of tags
 | 
						|
            tags[0].binary(row[5])  # location
 | 
						|
            tags[1].int(row[6])  # groupId
 | 
						|
            stmt.set_tbname_tags(tb_name, tags)
 | 
						|
        values: taos.TaosBind = taos.new_bind_params(4)  # 4 is count of columns
 | 
						|
        values[0].timestamp(get_ts(row[1]))
 | 
						|
        values[1].float(row[2])
 | 
						|
        values[2].int(row[3])
 | 
						|
        values[3].float(row[4])
 | 
						|
        stmt.bind_param(values)
 | 
						|
 | 
						|
 | 
						|
def insert_data():
 | 
						|
    conn = taos.connect(database="power")
 | 
						|
    try:
 | 
						|
        stmt = conn.statement("INSERT INTO ? USING meters TAGS(?, ?) VALUES(?, ?, ?, ?)")
 | 
						|
        bind_row_by_row(stmt)
 | 
						|
        stmt.execute()
 | 
						|
        stmt.close()
 | 
						|
    finally:
 | 
						|
        conn.close()
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    create_stable()
 | 
						|
    insert_data()
 |