Python Connector

Python连接器的使用参见视频教程

安装准备

Python客户端安装

Linux

用户可以在源代码的src/connector/python(或者tar.gz的/connector/python)文件夹下找到python2和python3的connector安装包。用户可以通过pip命令安装:

pip install src/connector/python/linux/python2/

pip3 install src/connector/python/linux/python3/

Windows

在已安装Windows TDengine 客户端的情况下, 将文件”C:\TDengine\driver\taos.dll” 拷贝到 “C:\windows\system32” 目录下, 然后进入Windwos cmd 命令行界面

  1. cd C:\TDengine\connector\python\windows
  2. python -m pip install python2\

  1. cd C:\TDengine\connector\python\windows
  2. python -m pip install python3\
  • 如果机器上没有pip命令,用户可将src/connector/python/python3或src/connector/python/python2下的taos文件夹拷贝到应用程序的目录使用。 对于windows 客户端,安装TDengine windows 客户端后,将C:\TDengine\driver\taos.dll拷贝到C:\windows\system32目录下即可。

使用

代码示例

  • 导入TDengine客户端模块
  1. import taos
  • 获取连接并获取游标对象
  1. conn = taos.connect(host="127.0.0.1", user="root", password="taosdata", config="/etc/taos")
  2. c1 = conn.cursor()
  • host 是TDengine 服务端所有IP, config 为客户端配置文件所在目录

  • 写入数据

  1. import datetime
  2. # 创建数据库
  3. c1.execute('create database db')
  4. c1.execute('use db')
  5. # 建表
  6. c1.execute('create table tb (ts timestamp, temperature int, humidity float)')
  7. # 插入数据
  8. start_time = datetime.datetime(2019, 11, 1)
  9. affected_rows = c1.execute('insert into tb values (\'%s\', 0, 0.0)' %start_time)
  10. # 批量插入数据
  11. time_interval = datetime.timedelta(seconds=60)
  12. sqlcmd = ['insert into tb values']
  13. for irow in range(1,11):
  14. start_time += time_interval
  15. sqlcmd.append('(\'%s\', %d, %f)' %(start_time, irow, irow*1.2))
  16. affected_rows = c1.execute(' '.join(sqlcmd))
  • 查询数据
  1. c1.execute('select * from tb')
  2. # 拉取查询结果
  3. data = c1.fetchall()
  4. # 返回的结果是一个列表,每一行构成列表的一个元素
  5. numOfRows = c1.rowcount
  6. numOfCols = len(c1.description)
  7. for irow in range(numOfRows):
  8. print("Row%d: ts=%s, temperature=%d, humidity=%f" %(irow, data[irow][0], data[irow][1],data[irow][2]))
  9. # 直接使用cursor 循环拉取查询结果
  10. c1.execute('select * from tb')
  11. for data in c1:
  12. print("ts=%s, temperature=%d, humidity=%f" %(data[0], data[1],data[2]))
  • 创建订阅
  1. # 创建一个主题为 'test' 消费周期为1000毫秒的订阅
  2. # 第一个参数为 True 表示重新开始订阅,如为 False 且之前创建过主题为 'test' 的订阅,则表示继续消费此订阅的数据,而不是重新开始消费所有数据
  3. sub = conn.subscribe(True, "test", "select * from tb;", 1000)
  • 消费订阅的数据
  1. data = sub.consume()
  2. for d in data:
  3. print(d)
  • 取消订阅
  1. sub.close()
  • 关闭连接
  1. c1.close()
  2. conn.close()

帮助信息

用户可通过python的帮助信息直接查看模块的使用信息,或者参考tests/examples/python中的示例程序。以下为部分常用类和方法:

  • TDengineConnection

    参考python中help(taos.TDengineConnection)。 这个类对应客户端和TDengine建立的一个连接。在客户端多线程的场景下,推荐每个线程申请一个独立的连接实例,而不建议多线程共享一个连接。

  • TDengineCursor

    参考python中help(taos.TDengineCursor)。 这个类对应客户端进行的写入、查询操作。在客户端多线程的场景下,这个游标实例必须保持线程独享,不能夸线程共享使用,否则会导致返回结果出现错误。

  • connect 方法

    用于生成taos.TDengineConnection的实例。

Python客户端使用示例代码

在tests/examples/python中,我们提供了一个示例Python程序read_example.py,可以参考这个程序来设计用户自己的写入、查询程序。在安装了对应的客户端后,通过import taos引入taos类。主要步骤如下

  • 通过taos.connect获取TDengineConnection对象,这个对象可以一个程序只申请一个,在多线程中共享。
  • 通过TDengineConnection对象的 .cursor()方法获取一个新的游标对象,这个游标对象必须保证每个线程独享。
  • 通过游标对象的execute()方法,执行写入或查询的SQL语句
  • 如果执行的是写入语句,execute返回的是成功写入的行数信息affected rows
  • 如果执行的是查询语句,则execute执行成功后,需要通过fetchall方法去拉取结果集。 具体方法可以参考示例代码。