当前位置: 首页 > news >正文

TDengine 语言连接器(Python )

简介

taospy 是 TDengine 数据库面向 Python 语言提供的官方连接器,连接器对外提供对数据库写入、查询、订阅等多种访问接口。

安装连接器命令如下:

# 原生连接和 REST 连接
pip3 install taospy# WebSocket 连接,可选装
pip3 install taos-ws-py

连接器代码对外开源,源码托管在 Github taos-connector-python 仓库。

连接方式

taospy提供三种连接方式,我们推荐使用 WebSocket 连接

  • 原生连接,Python 连接器加载 TDengine 客户端驱动程序 (libtaos.so/taos.dll),直接连接 TDengine 实例,特点性能高,速度快。功能上支持数据写入、查询、数据订阅、schemaless 接口和参数绑定接口等功能。对应 taospy 包的 taos 模块。
  • REST 连接,Python 连接器通过 taosAdapter 提供的 HTTP 接口连接 TDengine 实例,特点依赖小,不需要安装 TDengine 客户端驱动。功能上不支持 schemaless 和数据订阅等特性。对应 taospy 包的 taosrest 模块。
  • WebSocket 连接,Python 连接器通过 taosAdapter 提供的 WebSocket 接口连接 TDengine 实例,特点是兼具前两种连接的优势,即性能高又依赖小。功能上 WebSocket 连接实现功能集合和原生连接有少量不同。对应 taos-ws-py 包,可以选装。

连接方式的详细介绍请参考:连接方式

除了对原生接口和 REST 接口的封装,taospy 还提供了符合 Python 数据访问规范 (PEP 249) 的编程接口。这使得 taospy 和很多第三方工具集成变得简单,比如 SQLAlchemy 和 pandas。

使用客户端驱动提供的原生接口直接与服务端建立的连接的方式下文中称为“原生连接”;使用 taosAdapter 提供的 REST 接口或 WebSocket 接口与服务端建立的连接的方式下文中称为“REST 连接”或“WebSocket 连接”。

Python 版本兼容性

支持 Python 3.0 及以上版本。

支持的平台

  • 原生连接支持的平台和 TDengine 客户端驱动支持的平台一致。
  • WebSocket/REST 连接支持所有能运行 Python 的平台。

历史版本

Python Connector 历史版本(建议使用最新版本的 taospy):

Python Connector 版本主要变化TDengine 版本
2.8.0移除 Apache Superset 连接驱动-
2.7.23支持 DECIMAL 数据类型-
2.7.22支持 Python 3.12 及以上版本-
2.7.21Native 支持 STMT2 写入-
2.7.19支持 Apache Superset 连接 TDengine Cloud 数据源-
2.7.18支持 Apache Superset 产品连接本地 TDengine 数据源-
2.7.16新增订阅配置 (session.timeout.ms, max.poll.interval.ms)-
2.7.15新增 VARBINARY 和 GEOMETRY 类型支持-
2.7.14修复已知问题-
2.7.13新增 tmq 同步提交 offset 接口-
2.7.121. 新增 varbinary 类型支持(STMT 暂不支持 varbinary)
2. query 性能提升(感谢贡献者hadrianl)
3.1.1.2 及更高版本
2.7.9数据订阅支持获取消费进度和重置消费进度3.0.2.6 及更高版本
2.7.8新增 execute_many3.0.0.0 及更高版本

WebSocket Connector 历史版本:

WebSocket Connector 版本主要变化TDengine 版本
0.4.0支持订阅新增参数动态扩展-
0.3.9修复 fetchmany 自定义行数时获取不完全的问题-
0.3.8支持 SuperSet 连接到 TDengine 云服务实例-
0.3.5修复 crypto provider 中的问题-
0.3.4支持 VARBINARY 和 GEOMETRY 数据类型3.3.0.0 及更高版本
0.3.2优化 WebSocket sql 查询和插入性能,修改 readme 和 文档,修复已知问题3.2.3.0 及更高版本
0.2.9已知问题修复-
0.2.51. 数据订阅支持获取消费进度和重置消费进度
2. 支持 schemaless
3. 支持 STMT
-
0.2.4数据订阅新增取消订阅方法3.0.5.0 及更高版本

处理异常

Python 连接器可能会产生 4 种异常:

  • Python 连接器本身的异常
  • 原生连接方式的异常
  • websocket 连接方式异常
  • 数据订阅异常
  • TDengine 其他功能模块的报错,请参考 错误码
Error TypeDescriptionSuggested Actions
InterfaceErrortaosc 版本太低,不支持所使用的接口请检查 TDengine 客户端版本
ConnectionError数据库链接错误请检查 TDengine 服务端状态和连接参数
DatabaseError数据库错误请检查 TDengine 服务端版本,并将 Python 连接器升级到最新版
OperationalError操作错误API 使用错误,请检查代码
ProgrammingError接口调用错误请检查提交的数据是否正确
StatementErrorstmt 相关异常请检查绑定参数与 sql 是否匹配
ResultError操作数据错误请检查操作的数据与数据库中的数据类型是否匹配
SchemalessErrorschemaless 相关异常请检查数据格式及对应的协议类型是否正确
TmqErrortmq 相关异常请检查 Topic 及 consumer 配置是否正确

Python 中通常通过 try-expect 处理异常,异常处理相关请参考 Python 错误和异常文档。
TDengine 其他功能模块的报错,请参考 错误码

Python Connector 的所有数据库操作如果出现异常,都会直接抛出来。由应用程序负责异常处理。比如:

import taostry:conn = taos.connect()conn.execute("CREATE TABLE 123")  # wrong sql
except taos.Error as e:print(e)print("exception class: ", e.__class__.__name__)print("error number:", e.errno)print("error message:", e.msg)
except BaseException as other:print("exception occur")print(other)# output:
# [0x0216]: syntax error near 'Incomplete SQL statement'
# exception class:  ProgrammingError
# error number: -2147483114
# error message: syntax error near 'Incomplete SQL statement'

数据类型映射

TDengine 目前支持时间戳、数字、字符、布尔类型,与 Python 对应类型转换如下:

TDengine DataTypePython DataType
TIMESTAMPdatetime
INTint
BIGINTint
FLOATfloat
DOUBLEint
SMALLINTint
TINYINTint
BOOLbool
BINARYstr
NCHARstr
JSONstr
GEOMETRYbytearray
VARBINARYbytearray
DECIMALDecimal

示例程序汇总

示例程序链接示例程序内容
bind_multi.py参数绑定,一次绑定多行
bind_row.py参数绑定,一次绑定一行
insert_lines.pyInfluxDB 行协议写入
json_tag.py使用 JSON 类型的标签
tmq_consumer.pytmq 订阅
native_all_type_query.py支持全部类型示例
native_all_type_stmt.py参数绑定 stmt 全部类型示例
test_stmt2.py参数绑定 stmt2 写入示例

示例程序源码请参考:

  1. 原生更多示例程序
  2. WebSocket 更多示例程序

关于纳秒 (nanosecond)

由于目前 Python 对 nanosecond 支持的不完善 (见下面的链接),目前的实现方式是在 nanosecond 精度时返回整数,而不是 ms 和 us 返回的 datetime 类型,应用开发者需要自行处理,建议使用 pandas 的 to_datetime()。未来如果 Python 正式完整支持了纳秒,Python 连接器可能会修改相关接口。

  1. https://stackoverflow.com/questions/10611328/parsing-datetime-strings-containing-nanoseconds
  2. https://www.python.org/dev/peps/pep-0564/

常见问题

欢迎提问或报告问题。

API 参考

WebSocket 连接

URL 规范
[+<protocol>]://[[<username>:<password>@]<host>:<port>][/<database>][?<p1>=<v1>[&<p2>=<v2>]]
|------------|---|-----------|-----------|------|------|------------|-----------------------|
|   protocol |   | username  | password  | host | port |  database  |  params               |
  • protocol:使用 websocket 协议建立连接。例如ws://localhost:6041
  • username/password:数据库的用户名和密码。
  • host/port:主机地址和端口号。例如localhost:6041
  • database:数据库名称。
  • params:其他参数。例如 token。
建立连接
  • fn connect(dsn: Option<&str>, args: Option<&PyDict>) -> PyResult<Connection>
    • 接口说明:建立 taosAdapter 连接。
    • 参数说明
      • dsn:类型 Option<&str> 可选,数据源名称(DSN),用于指定要连接的数据库的位置和认证信息。
      • args:类型 Option<&PyDict> 可选,以 Python 字典的形式提供,可用于设置
        • user:数据库的用户名
        • password:数据库的密码。
        • host:主机地址
        • port:端口号
        • database:数据库名称
    • 返回值:连接对象。
    • 异常:操作失败抛出 ConnectionError 异常。
  • fn cursor(&self) -> PyResult<Cursor>
    • 接口说明:创建一个新的数据库游标对象,用于执行 SQL 命令和查询。
    • 返回值:数据库游标对象。
    • 异常:操作失败抛出 ConnectionError 异常。
执行 SQL
  • fn execute(&self, sql: &str) -> PyResult<i32>
    • 接口说明:执行 sql 语句。
    • 参数说明
      • sql:待执行的 sql 语句。
    • 返回值:影响的条数。
    • 异常:操作失败抛出 QueryError 异常。
  • fn execute_with_req_id(&self, sql: &str, req_id: u64) -> PyResult<i32>
    • 接口说明:执行带有 req_id 的 sql 语句。
    • 参数说明
      • sql:待执行的 sql 语句。
      • reqId:用于问题追踪。
    • 返回值:影响的条数。
    • 异常:操作失败抛出 QueryError 异常。
  • fn query(&self, sql: &str) -> PyResult<TaosResult>
    • 接口说明:查询数据。
    • 参数说明
      • sql:待执行的 sql 语句。
    • 返回值TaosResult 数据集对象。
    • 异常:操作失败抛出 QueryError 异常。
  • fn query_with_req_id(&self, sql: &str, req_id: u64) -> PyResult<TaosResult>
    • 接口说明:查询带有 req_id 的 sql 语句。
    • 参数说明
      • sql:待执行的 sql 语句。
      • reqId:用于问题追踪。
    • 返回值TaosResult 数据集对象。
    • 异常:操作失败抛出 QueryError 异常。
数据集

TaosResult 对象可以通过循环遍历获取查询到的数据。

  • fn fields(&self) -> Vec<TaosField>
    • 接口说明:获取查询数据的字段信息,包括:名称,类型及字段长度。
    • 返回值Vec<TaosField> 字段信息数组。
  • fn field_count(&self) -> i32
    • 接口说明:获取查询到的记录条数。
    • 返回值i32 查询到的记录条数。
无模式写入
  • fn schemaless_insert(&self, lines: Vec<String>, protocol: PySchemalessProtocol, precision: PySchemalessPrecision, ttl: i32, req_id: u64) -> PyResult<()>
    • 接口说明:无模式写入。
    • 参数说明
      • lines:待写入的数据数组,无模式具体的数据格式可参考 Schemaless 写入
      • protocol:协议类型
        • PySchemalessProtocol::Line:InfluxDB 行协议(Line Protocol)。
        • PySchemalessProtocol::Telnet:OpenTSDB 文本行协议。
        • PySchemalessProtocol::Json:JSON 协议格式
      • precision:时间精度
        • PySchemalessPrecision::Hour:小时
        • PySchemalessPrecision::Minute:分钟
        • PySchemalessPrecision::Second
        • PySchemalessPrecision::Millisecond:毫秒
        • PySchemalessPrecision::Microsecond:微秒
        • PySchemalessPrecision::Nanosecond:纳秒
      • ttl:表过期时间,单位天。
      • reqId:用于问题追踪。
    • 异常:操作失败抛出 DataErrorOperationalError 异常。
参数绑定
  • fn statement(&self) -> PyResult<TaosStmt>
    • 接口说明:使用 连接 对象创建 stmt 对象。
    • 返回值:stmt 对象。
    • 异常:操作失败抛出 ConnectionError 异常。
  • fn prepare(&mut self, sql: &str) -> PyResult<()>
    • 接口说明:绑定预编译 sql 语句。
    • 参数说明
      • sql:预编译的 SQL 语句。
    • 异常:操作失败抛出 ProgrammingError 异常。
  • fn set_tbname(&mut self, table_name: &str) -> PyResult<()>
    • 接口说明:设置将要写入数据的表名。
    • 参数说明
      • tableName:表名,如果需要指定数据库,例如:db_name.table_name 即可。
    • 异常:操作失败抛出 ProgrammingError 异常。
  • fn set_tags(&mut self, tags: Vec<PyTagView>) -> PyResult<()>
    • 接口说明:设置表 Tags 数据,用于自动建表。
    • 参数说明
      • paramsArray:Tags 数据。
    • 异常:操作失败抛出 ProgrammingError 异常。
  • fn bind_param(&mut self, params: Vec<PyColumnView>) -> PyResult<()>
    • 接口说明:绑定数据。
    • 参数说明
      • paramsArray:绑定数据。
    • 异常:操作失败抛出 ProgrammingError 异常。
  • fn add_batch(&mut self) -> PyResult<()>
    • 接口说明:提交绑定数据。
    • 异常:操作失败抛出 ProgrammingError 异常。
  • fn execute(&mut self) -> PyResult<usize>
    • 接口说明:执行将绑定的数据全部写入。
    • 返回值:写入条数。
    • 异常:操作失败抛出 QueryError 异常。
  • fn affect_rows(&mut self) -> PyResult<usize>
    • 接口说明:获取写入条数。
    • 返回值:写入条数。
  • fn close(&self) -> PyResult<()>
    • 接口说明:关闭 stmt 对象。
数据订阅
  • 创建消费者支持属性列表

    • host:主机地址。
    • port:端口号。
    • group.id:所在的 group。
    • client.id:客户端 id。
    • td.connect.user:数据库用户名。
    • td.connect.pass:数据库密码。
    • td.connect.token:数据库的连接 token。
    • auto.offset.reset:来确定消费位置为最新数据(latest)还是包含旧数据(earliest)。
    • enable.auto.commit:是否允许自动提交。
    • auto.commit.interval.ms:自动提交间隔
  • fn Consumer(conf: Option<&PyDict>, dsn: Option<&str>) -> PyResult<Self>

    • 接口说明 消费者构造函数。
      • conf:类型 Option<&PyDict> 可选,以 Python 字典的形式提供,具体配置参见属性列表。
      • dsn:类型 Option<&str> 可选,数据源名称(DSN),用于指定要连接的数据库的位置和认证信息。
    • 返回值:Consumer 消费者对象。
    • 异常:操作失败抛出 ConsumerException 异常。
  • fn subscribe(&mut self, topics: &PyList) -> PyResult<()>

    • 接口说明 订阅一组主题。
    • 参数说明
      • topics:订阅的主题列表。
    • 异常:操作失败抛出 ConsumerException 异常。
  • fn unsubscribe(&mut self)

    • 接口说明 取消订阅。
    • 异常:操作失败抛出 ConsumerException 异常。
  • fn poll(&mut self, timeout: Option<f64>) -> PyResult<Option<Message>>

    • 接口说明 轮询消息。
    • 参数说明
      • timeoutMs:表示轮询的超时时间,单位毫秒。
    • 返回值Message 每个主题对应的数据。
    • 异常:操作失败抛出 ConsumerException 异常。
  • fn commit(&mut self, message: &mut Message) -> PyResult<()>

    • 接口说明 提交当前处理的消息的偏移量。
    • 参数说明
      • message:类型 Message, 当前处理的消息的偏移量。
    • 异常:操作失败抛出 ConsumerException 异常。
  • fn assignment(&mut self) -> PyResult<Option<Vec<TopicAssignment>>>

    • 接口说明:获取消费者当前分配的指定的分区或所有分区。
    • 返回值:返回值类型为 Vec<TopicAssignment>,即消费者当前分配的所有分区。
    • 异常:操作失败抛出 ConsumerException 异常。
  • fn seek(&mut self, topic: &str, vg_id: i32, offset: i64) -> PyResult<()>

    • 接口说明:将给定分区的偏移量设置到指定的位置。
    • 参数说明
      • topic:订阅的主题。
      • vg_id:vgroupid。
      • offset:需要设置的偏移量。
    • 异常:操作失败抛出 ConsumerException 异常。
  • fn committed(&mut self, topic: &str, vg_id: i32) -> PyResult<i64>

    • 接口说明:获取订阅主题的 vgroupid 分区最后提交的偏移量。
    • 参数说明
      • topic:订阅的主题。
      • vg_id:vgroupid。
    • 返回值i64,分区最后提交的偏移量。
    • 异常:操作失败抛出 ConsumerException 异常。
  • fn position(&mut self, topic: &str, vg_id: i32) -> PyResult<i64>

    • 接口说明:获取给定分区当前的偏移量。
    • 参数说明
      • topic:订阅的主题。
      • vg_id:vgroupid。
    • 返回值i64,分区最后提交的偏移量。
    • 异常:操作失败抛出 ConsumerException 异常。
  • fn close(&mut self)

    • 接口说明:关闭 tmq 连接。
    • 异常:操作失败抛出 ConsumerException 异常。

Native 连接

建立连接
  • def connect(*args, **kwargs):
    • 接口说明:建立 taosAdapter 连接。
    • 参数说明
      • kwargs:以 Python 字典的形式提供,可用于设置
        • user:数据库的用户名
        • password:数据库的密码。
        • host:主机地址
        • port:端口号
        • database:数据库名称
        • timezone:时区
    • 返回值TaosConnection 连接对象。
    • 异常:操作失败抛出 AttributeErrorConnectionError 异常。
  • def cursor(self)
    • 接口说明:创建一个新的数据库游标对象,用于执行 SQL 命令和查询。
    • 返回值:数据库游标对象。
执行 SQL
  • def execute(self, operation, req_id: Optional[int] = None)
    • 接口说明:执行 sql 语句。
    • 参数说明
      • operation:待执行的 sql 语句。
      • reqId:用于问题追踪。
    • 返回值:影响的条数。
    • 异常:操作失败抛出 ProgrammingError 异常。
  • def query(self, sql: str, req_id: Optional[int] = None) -> TaosResult
    • 接口说明:查询数据。
    • 参数说明
      • sql:待执行的 sql 语句。
      • reqId:用于问题追踪。
    • 返回值TaosResult 数据集对象。
    • 异常:操作失败抛出 ProgrammingError 异常。
数据集

TaosResult 对象可以通过循环遍历获取查询到的数据。

  • def fields(&self)
    • 接口说明:获取查询数据的字段信息,包括:名称,类型及字段长度。
    • 返回值TaosFields 字段信息 list。
  • def field_count(&self)
    • 接口说明:获取查询到的记录条数。
    • 返回值:查询到的记录条数。
  • def fetch_all_into_dict(self)
    • 接口说明:将所有的记录转换为字典。
    • 返回值:返回字典列表。
无模式写入
  • def schemaless_insert(&self, lines: List[str], protocol: SmlProtocol, precision: SmlPrecision, req_id: Optional[int] = None, ttl: Optional[int] = None) -> int:
    • 接口说明:无模式写入。
    • 参数说明
      • lines:待写入的数据数组,无模式具体的数据格式可参考 Schemaless 写入
      • protocol:协议类型
        • SmlProtocol.LINE_PROTOCOL:InfluxDB 行协议(Line Protocol)。
        • SmlProtocol.TELNET_PROTOCOL:OpenTSDB 文本行协议。
        • SmlProtocol.JSON_PROTOCOL:JSON 协议格式
      • precision:时间精度
        • SmlPrecision.Hour:小时
        • SmlPrecision.Minute:分钟
        • SmlPrecision.Second
        • SmlPrecision.Millisecond:毫秒
        • SmlPrecision.Microsecond:微秒
        • SmlPrecision.Nanosecond:纳秒
      • ttl:表过期时间,单位天。
      • reqId:用于问题追踪。
    • 返回值:影响的条数。
    • 异常:操作失败抛出 SchemalessError 异常。
参数绑定
  • def statement2(self, sql=None, option=None)
    • 接口说明:使用连接对象创建 stmt2 对象
    • 参数说明
      • sql:绑定的 SQL 语句,如果不为空会调用prepare函数
      • option 传入 TaosStmt2Option 类实例选项
    • 返回值:stmt2 对象。
    • 异常:操作失败抛出 ConnectionError 异常。
  • def prepare(self, sql)
    • 接口说明:绑定预编译 sql 语句
    • 参数说明
      • sql:绑定的 SQL 语句
    • 异常:操作失败抛出 StatementError 异常。
  • def bind_param(self, tbnames, tags, datas)
    • 接口说明:以独立数组方式绑定数据
    • 参数说明
      • tbnames:绑定表名数组,数据类型为 list
      • tags:绑定 tag 列值数组,数据类型为 list
      • datas:绑定普通列值数组,数据类型为 list
    • 异常:操作失败抛出 StatementError 异常
  • def bind_param_with_tables(self, tables)
    • 接口说明:以独立表方式绑定数据,独立表是以表为组织单位,每张表中有表名,TAG 值及普通列数值属性
    • 参数说明
      • tablesBindTable 独立表对象数组
    • 异常:操作失败抛出 StatementError 异常。
  • def execute(self) -> int:
    • 接口说明:执行将绑定数据全部写入
    • 返回值:影响行数
    • 异常:操作失败抛出 QueryError 异常。
  • def result(self)
    • 接口说明:获取参数绑定查询结果集
    • 返回值:返回 TaosResult 对象
  • def close(self)
    • 接口说明:关闭 stmt2 对象
数据订阅
  • 创建消费者支持属性列表
    • td.connect.ip:主机地址。
    • td.connect.port:端口号。
    • group.id:所在的 group。
    • client.id:客户端 id。
    • td.connect.user:数据库用户名。
    • td.connect.pass:数据库密码。
    • td.connect.token:数据库的连接 token。
    • auto.offset.reset:来确定消费位置为最新数据(latest)还是包含旧数据(earliest)。
    • enable.auto.commit:是否允许自动提交。
    • auto.commit.interval.ms:自动提交间隔
  • def Consumer(configs)
    • 接口说明 消费者构造函数。
      • configs:Python 字典的形式提供,具体配置参见属性列表。
    • 返回值:Consumer 消费者对象。
    • 异常:操作失败抛出 TmqError 异常。
  • def subscribe(self, topics)
    • 接口说明 订阅一组主题。
    • 参数说明
      • topics:订阅的主题列表。
    • 异常:操作失败抛出 TmqError 异常。
  • def unsubscribe(self)
    • 接口说明 取消订阅。
    • 异常:操作失败抛出 TmqError 异常。
  • def poll(self, timeout: float = 1.0)
    • 接口说明 轮询消息。
    • 参数说明
      • timeout:表示轮询的超时时间,单位毫秒。
    • 返回值Message 每个主题对应的数据。
    • 异常:操作失败抛出 TmqError 异常。
  • def commit(self, message: Message = None, offsets: [TopicPartition] = None)
    • 接口说明 提交当前处理的消息的偏移量。
    • 参数说明
      • message:类型 Message, 当前处理的消息的偏移量。
      • offsets:类型 [TopicPartition], 提交一批消息的偏移量。
    • 异常:操作失败抛出 TmqError 异常。
  • def assignment(self)
    • 接口说明:获取消费者当前分配的指定的分区或所有分区。
    • 返回值:返回值类型为 [TopicPartition],即消费者当前分配的所有分区。
    • 异常:操作失败抛出 TmqError 异常。
  • def seek(self, partition)
    • 接口说明:将给定分区的偏移量设置到指定的位置。
    • 参数说明
      • partition:需要设置的偏移量。
        • topic:订阅的主题
        • partition:分区
        • offset:偏移量
    • 异常:操作失败抛出 TmqError 异常。
  • def committed(self, partitions)
    • 接口说明:获取订阅主题的分区最后提交的偏移量。
    • 参数说明
      • partition:需要设置的偏移量。
        • topic:订阅的主题
        • partition:分区
    • 返回值partition,分区最后提交的偏移量。
    • 异常:操作失败抛出 TmqError 异常。
  • def position(self, partitions)
    • 接口说明:获取给定分区当前的偏移量。
    • 参数说明
      • partition:需要设置的偏移量。
        • topic:订阅的主题
        • partition:分区
    • 返回值partition,分区最后提交的偏移量。
    • 异常:操作失败抛出 TmqError 异常。
  • def close(self)
    • 接口说明:关闭 tmq 连接。
    • 异常:操作失败抛出 TmqError 异常。

REST 连接

  • def connect(**kwargs) -> TaosRestConnection
    • 接口说明:建立 taosAdapter 连接。
    • 参数说明
      • kwargs:以 Python 字典的形式提供,可用于设置
        • user:数据库的用户名
        • password:数据库的密码。
        • host:主机地址
        • port:端口号
        • database:数据库名称
    • 返回值:连接对象。
    • 异常:操作失败抛出 ConnectError 异常。
  • def execute(self, sql: str, req_id: Optional[int] = None) -> Optional[int]
    • 接口说明:执行 sql 语句。
    • 参数说明
      • sql:待执行的 sql 语句。
      • reqId:用于问题追踪。
    • 返回值:影响的条数。
    • 异常:操作失败抛出 ConnectErrorHTTPError 异常。
  • def query(self, sql: str, req_id: Optional[int] = None) -> Result
    • 接口说明:查询数据。
    • 参数说明
      • sql:待执行的 sql 语句。
      • reqId:用于问题追踪。
    • 返回值Result 数据集对象。
    • 异常:操作失败抛出 ConnectErrorHTTPError 异常。
  • RestClient(self, url: str, token: str = None, database: str = None, user: str = "root", password: str = "taosdata", timeout: int = None, convert_timestamp: bool = True, timezone: Union[str, datetime.tzinfo] = None)
    • 接口说明:建立 taosAdapter 连接 client。
    • 参数说明
      • url:taosAdapter REST 服务的 URL。
      • user:数据库的用户名。
      • password:数据库的密码。
      • database:数据库名称。
      • timezone:时区。
      • timeout:HTTP 请求超时时间。单位为秒。
      • convert_timestamp:是否将时间戳从 STR 类型转换为 datetime 类型。
      • timezone:时区。
    • 返回值:连接对象。
    • 异常:操作失败抛出 ConnectError 异常。
  • def sql(self, q: str, req_id: Optional[int] = None) -> dict
    • 接口说明:执行 sql 语句。
    • 参数说明
      • sql:待执行的 sql 语句。
      • reqId: 用于问题追踪。
    • 返回值:返回字典列表。
    • 异常:操作失败抛出 ConnectErrorHTTPError 异常。

访问官网

更多内容欢迎访问 TDengine 官网

相关文章:

TDengine 语言连接器(Python )

简介 taospy 是 TDengine 数据库面向 Python 语言提供的官方连接器&#xff0c;连接器对外提供对数据库写入、查询、订阅等多种访问接口。 安装连接器命令如下&#xff1a; # 原生连接和 REST 连接 pip3 install taospy# WebSocket 连接&#xff0c;可选装 pip3 install tao…...

Android compose源码浅析——Modifier

Modifier浅析 Modifier的使用foldOutfoldInanyall总结Modifier的使用 先来一段代码1: @Preview(showBackground = true) @Composable fun GreetingPreview() {ComposeTestTheme {Box(modifier = Modifier.size(DpSize(Dp(100f),Dp(100f))).padding(Dp(10f)).background(Colo…...

基于机器视觉的多孔零件边缘缺陷检测(源码C++、opencv、凸包、凸缺陷检测)

&#x1f451;主页&#xff1a;吾名招财 &#x1f453;简介&#xff1a;工科学硕&#xff0c;研究方向机器视觉&#xff0c;爱好较广泛… ​&#x1f4ab;签名&#xff1a;面朝大海&#xff0c;春暖花开&#xff01; 基于机器视觉的多孔零件边缘缺陷检测&#xff08;源码C、ope…...

JAVAWeb_Servlet:前置准备与理论简易介绍

要写JAVA_Web&#xff1a;首先就得建个项目——如何在Eclipse新建一个Web项目-CSDN博客 然后我们考虑具体的代码细节&#xff08;接下来就是我们的前置准备&#xff09; 一、导包&#xff1a; 在 Eclipse 中&#xff0c;如果需要快速导入缺失的包&#xff08;例如&#xff0…...

反射 tcp

反射 临时越过权限 获取成员变量1并进行修改 成员方法 TCP客户端...

UML综合实验四

1. 计算机包含内存(RAM)、CPU等硬件设备&#xff0c;根据下面的“产品等级结构-产品族”示意图&#xff0c;使用抽象工厂模式实现计算机设备创建过程并绘制相应的类图。 2. 电脑组装工厂可以将CPU、内存、硬盘、主机、显示器等硬件设备组装在一起构成一台完整的电脑&#xff0c…...

<《AI大模型应知应会100篇》第8篇:大模型的知识获取方式及其局限性

第8篇&#xff1a;大模型的知识获取方式及其局限性 摘要 大模型&#xff08;如GPT、BERT、Qwen、DeepSeek等&#xff09;凭借其卓越的自然语言处理能力&#xff0c;已经成为人工智能领域的明星。然而&#xff0c;这些模型“知道”什么&#xff1f;它们如何获取知识&#xff1f…...

【回眸】Linux 内核 (十六) 之 多线程编程 下

前言 前面介绍了互斥锁&#xff0c;本篇博文介绍死锁及其他多线程遇到的情况。 什么情况会造成死锁 死锁指的是两个或两个以上的运算单元&#xff08;进程、线程或协程&#xff09;&#xff0c;互相持有对方所需的资源&#xff0c;导致它们都无法向前推进&#xff0c;从而导…...

学习笔记083——Java Stream API

文章目录 1、过滤数据 filter()2、转换元素 map()3、排序 sorted()3.1、自定义排序规则 4、去重 distinct()5、限制元素数量 limit()6、收集结果 collect()6.1、收集为List6.2、收集为Set6.3、转为Map6.4、基本用法&#xff08;注意键冲突会抛异常&#xff09;6.5、处理键冲突&…...

逍遥模拟器ARM过检测技术全解析

逍遥模拟器ARM框架安装magisk和修改设备型号隐藏应用隐藏root过检测 逍遥模拟器ARMmagisk改设备型号隐藏应用隐藏root 引言 逍遥模拟器以其出色的性能和丰富的功能&#xff0c;深受广大用户喜爱&#xff0c;让用户能在电脑上轻松运行各类安卓应用和游戏。然而&#xff0c;为保…...

Easysearch VS Opensearch 数据写入与存储性能对比

本文记录 Easysearch 和 Opensearch 数据写入和数据存储方面的性能对比。 准备 压测工具&#xff1a;INFINI Loadgen 对比版本&#xff1a; Easysearch 1.11.1&#xff08;lucene 8.11.4&#xff09;Opensearch 2.19.1&#xff08;lucene 9.12.1&#xff09; 节点 JVM 配置…...

C++中STL学习(一)——向量、栈、堆、集合

#include “bits/stdc.h” using namespace std; int main() { // -------------------- 1、向量vector&#xff1a;可以替换数组&#xff0c;不需要事先指定长度 // ------------------------- vector arr; // 构建int数组 vector arr1(100); // 构建初始长度100的int向量 ve…...

柑橘病虫害图像分类数据集OrangeFruitDataset-8600

文章目录 1. 前言2. 数据类别介绍3. 数据集地址 1. 前言 柑橘&#xff0c;作为水果界的 “宠儿”&#xff0c;不仅以其酸甜可口的味道深受大众喜爱&#xff0c;更是在全球水果产业中占据着举足轻重的地位。无论是早餐中的一杯橙汁&#xff0c;还是下午茶里的柑橘甜点&#xff…...

leetcode刷题-单调栈

代码随想录单调栈|739. 每日温度、496.下一个更大元素 I、503.下一个更大元素II、42. 接雨水、84.柱状图中最大的矩形 739. 每日温度496.下一个更大元素 I503.下一个更大元素II42. 接雨水 -- 面试常考题84.柱状图中最大的矩形 739. 每日温度 leetcode题目链接 代码随想录文档讲…...

【设计模式】访问者模式

**简介 假设你有一个购物车&#xff08;对象结构&#xff09;&#xff0c;里面有多种商品&#xff08;元素&#xff09;&#xff0c;如苹果、牛奶、书籍。每个商品的计价规则不同&#xff1a; 水果按重量计价牛奶按数量计价书籍按固定价格计价 现在需要实现两种功能&#xff1…...

【ISP】ISP pipeline(AI)

ISP Pipeline 全流程概览 ISP&#xff08;Image Signal Processing&#xff0c;图像信号处理&#xff09;流程通常从原始 Bayer 数据出发&#xff0c;经过一系列模块处理&#xff0c;逐步完成图像校正和增强&#xff0c;最终生成用于显示或编码的标准图像。常见处理模块包括&a…...

【设计模式】模板模式

简介 假设你要冲泡咖啡和茶&#xff0c;两者的流程相似但部分步骤不同&#xff1a; 烧水&#xff08;公共步骤&#xff09;加入主材料&#xff08;咖啡粉/茶叶&#xff09;添加调料&#xff08;糖/牛奶&#xff09;→ 可选步骤倒进杯子&#xff08;公共步骤&#xff09; 模板…...

GDB调试程序的基本命令和用法(Qt程序为例)

1. 引言 GDB&#xff08;GNU Debugger&#xff09;是一个强大的命令行调试工具&#xff0c;它可以帮助开发者在程序运行时查找和修复错误。当调试Qt程序时&#xff0c;GDB同样适用&#xff0c;并且能够帮助开发者定位诸如数组越界挂死等复杂问题。 2. 基本命令 2.1 启动GDB …...

vue3腾讯云直播 前端推流

1、在index.html文件中引入&#xff08;在body体中&#xff09; <script src"https://video.sdk.qcloudecdn.com/web/TXLivePusher-2.1.1.min.js" charset"utf-8"></script> 2、vue文件中&#xff0c;添加video推流&#xff08;我用的推流地…...

DP_AUX辅助通道介绍

DisplayPort&#xff08;简称DP&#xff09;是一个由PC及芯片制造商联盟开发&#xff0c;视频电子标准协会&#xff08;VESA&#xff09;标准化的数字式视频接口标准。该接口免认证、免授权金&#xff0c;主要用于视频源与显示器等设备的连接&#xff0c;并也支持携带音频、USB…...

【微机及接口技术】- 第九章 串行通信与串行接口(下)

文章目录 第二节 串行通信协议一、异步串行通信协议二、同步串行通信协议 第三节 串行接口标准RS-232C一、RS-232C信号线定义二、电气特性 第四节 可编程串行接口芯片8251A一、基本性能二、内部结构三、外部引脚功能1. 同CPU的连接信号2. MODEM控制信号&#xff08;4个&#xf…...

人形机器人制造—3D打印推动微型化与轻量化设计

在人形机器人仿生架构的构建中&#xff0c;多模态传感器集群与仿生关节矩阵的拓扑融合&#xff0c;正催生第三代具身智能的力学革命。通过分布式触觉薄膜、双目视觉惯性测量单元&#xff08;200Hz采样率&#xff09;与肌电模拟传感器的三重耦合&#xff0c;机器人获得了超越人类…...

前端性能优化高频面试题解析与实战指南(2025版)

一、前端性能优化核心面试题汇总 1. 浏览器加载优化相关问题 Q1&#xff1a;浏览器从输入URL到页面渲染的完整流程中&#xff0c;有哪些关键性能节点&#xff1f; 核心流程&#xff1a;DNS解析 → TCP连接&#xff08;TLS握手&#xff09;→ HTTP请求 → 资源下载 → 解析HT…...

【教程】xrdp修改远程桌面环境为xfce4

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 目录 xfce4 vs GNOME对比 配置教程 1. 安装 xfce4 桌面环境 2. 安装 xrdp 3. 配置 xrdp 使用 xfce4 4. 重启 xrdp 服务 5. 配置防火墙&#xff…...

递增子序列

递增子序列 难点&#xff1a; 结果集如何加&#xff1a;每次进入递归都判断是否sub中的个数>2&#xff1b;不允许对数组排序&#xff0c;如何在每层去重&#xff1a;不可以再用nums[i] nums[i-1]&#xff08;没有意义&#xff0c;重复的元素不一定挨着&#xff09;&#x…...

Linux磁盘管理双雄:lsblk与df深度解析

在Linux系统管理的日常工作里&#xff0c;磁盘管理占据着极为重要的地位&#xff0c;这里重点介绍lsblk和df这两个命令。 一、lsblk命令&#xff1a;呈现磁盘物理架构 lsblk是用于罗列块设备信息的实用命令&#xff0c;它以直观的树状结构呈现系统中的块设备&#xff0c;帮助…...

C#里设计Modbus-RTU(Remote Terminal Unit)协议

Modbus-RTU(Remote Terminal Unit)是一种串行通信协议,广泛用于工业自动化领域,支持主从式(Master-Slave)通信架构。它是Modbus协议的两种传输模式之一(另一种是ASCII模式),具有高效、简洁、可靠性强的特点,常用于RS-485或RS-232物理层通信。 核心特性 物理层 通常基…...

spark学习内容总结

Spark运行架构总结 一、核心结构 Spark框架的核心是一个计算引擎&#xff0c;整体采用标准的master-slave结构。其中&#xff0c;Driver作为master&#xff0c;负责管理整个集群中的作业任务调度&#xff1b;Executor作为slave&#xff0c;负责实际执行任务。 二、核心组件 ‌…...

MySQL多表查询、事务与索引的实践与应用

摘要&#xff1a;本文围绕MySQL数据库操作展开&#xff0c;通过构建部门与员工管理、餐饮业务相关的数据库表&#xff0c;并填充测试数据&#xff0c;系统地阐述了多表查询的多种方式&#xff0c;包括内连接、外连接和不同类型的子查询&#xff0c;同时介绍了事务的处理以及索引…...

MySQL【8.0.41版】安装详细教程--无需手动配置环境

一、MySQL 介绍 1. 概述 MySQL 是一个开源的关系型数据库管理系统&#xff0c;由瑞典公司 MySQL AB 开发&#xff0c;现属于 Oracle 旗下。它基于 SQL&#xff08;结构化查询语言&#xff09;进行数据管理&#xff0c;支持多用户、多线程操作&#xff0c;广泛应用于 Web 应用、…...

FRP练手:hello,world实现

方案一&#xff1a;使用 Flask&#xff08;推荐&#xff09; from flask import Flaskapp Flask(__name__)app.route(/) def hello_world():return "你好啊世界"if __name__ __main__:# 监听所有网络接口&#xff08;0.0.0.0&#xff09;&#xff0c;端口 3344app.…...

Mysql | 主从复制的工作机制

主从复制的工作机制 Mysql的主从复制 从库主要是读取主库的binlog日志来完成数据同步的, binlog中存储了对数据库所有修改SQL的语句。 首先Master开启BinLog二进制的写入。Slave从库通过ip、port、账号、密码链接到Master主数据库&#xff0c;链接成功后从库会向主数据库获取B…...

清明之后叙

经历了漫长的冬季&#xff0c;春天的脚步近了&#xff0c;要说讲这一年的开始&#xff0c;绝大数人说是从春季&#xff0c;但是我说应该是从冬季开始&#xff0c;中国传统讲冬至是一阳生&#xff0c;冬季收藏好了&#xff0c;开始收敛精气&#xff0c;养精蓄锐&#xff0c;好好…...

Docker新型容器镜像构建技术,如何正确高效的编写Dockerfile

一、容器与容器镜像之间的关系 说到Docker管理的容器不得不说容器镜像&#xff0c;主要因为容器镜像是容器模板&#xff0c;通过容器镜像我们才能快速创建容器。 如下图所示&#xff1a; Docker Daemon通过容器镜像创建容器。 二、容器镜像分类 操作系统类 CentOSUbuntu在do…...

Starrocks的Bitmap索引和Bloom filter索引以及全局字典

写这个的主要作用是梳理一下Starrocks的索引效率以及使用场景。 Starrocks Bitmap索引 原理&#xff1a; Bitmap 索引是一种使用 bitmap 的特殊数据库索引。bitmap 即为一个 bit 数组&#xff0c;一个 bit 的取值有两种&#xff1a;0 或 1。 每一个 bit 对应数据表中的一行&…...

从 0 到上线:Java 项目打包 Docker 镜像全流程实战

&#x1f4d6; 摘要 本文是一份超详细的Java项目Docker化实战手册&#xff0c;从环境准备到最终上线&#xff0c;手把手带你完成整个容器化部署流程。你将学会&#xff1a; Docker基础概念与核心原理如何为Java项目编写高效的Dockerfile多阶段构建优化镜像体积镜像推送与容器…...

【符号引用和直接引用是什么?有什么作用?什么场景下使用?为什么符号引用和直接引用在常量池里?】

符号引用与直接引用详解 1. 符号引用&#xff08;Symbolic Reference&#xff09; 定义&#xff1a; 符号引用是编译阶段使用的抽象标识符&#xff0c;通过全限定名、方法签名等符号描述目标&#xff08;如类、方法、字段&#xff09;。它不涉及具体内存地址&#xff0c;仅作为…...

ESModule和CommonJS在Node中的区别

ESModule console.log(require);//>errorconsole.log(module);//>errorconsole.log(exports);//>errorconsole.log(__filename);//>errorconsole.log(__dirname);//>error全部报错commonjs console.log(require);console.log(module);console.log(exports);co…...

阿里发布实时数字人项目OmniTalker,实时驱动技术再突破~

简介 OmniTalker 是一个由 阿里巴巴集团 Tongyi Lab&#xff08;通义实验室&#xff09; 开发的研究项目&#xff0c;专注于实时文本驱动的说话头像生成技术。该项目旨在通过文本输入生成同步的语音和视频内容&#xff0c;同时保留参考视频中的音视频风格。以下是关于 OmniTalk…...

Kubernetes-如何进入某POD中

Kubernetes 如何进入某POD中 工作中需要进入pod中查询比如pod 网络等问题 步骤&#xff1a; 1、 查询某pod, 比如该pod 为namespace test 下的 ip 为 192.168.1.100 #查询namespace 列表 #kubectl get ns #查询该ns下ip 为 192.168.1.100的pod # kubectl -n test get pods …...

java导出postgis空间数据几何对象shapefile文件

项目开发中&#xff0c;需要java后端实现导出postgis空间数据几何对象shapefile文件&#xff0c;以便能直观查看数据详情。注意事项Shapefile 默认的几何字段名为 the_geom&#xff0c;若导出时未显式指定或字段名被修改&#xff0c;部分软件&#xff08;如 ArcGIS、QGI&#x…...

蓝桥杯嵌入式按键长按双击

直接上代码这个代码里面我们简单实现了如果按键按下时间超过0.8秒K1的值增加&#xff0c;短按只增加一次&#xff0c;按键2长按K2值增加&#xff0c;按键3双击K1的值减1&#xff0c;按键4双击K2的值减1 #include "fun.h" #define long_press_time 800//定义长按时间…...

深入解析Java中的栈:从JVM原理到开发实践

一、栈的双重身份&#xff1a;JVM运行时数据区 vs 数据结构 1. JVM层面的栈 线程私有&#xff1a;每个线程独立拥有自己的栈 LIFO结构&#xff1a;后进先出的方法调用模型 栈帧存储&#xff1a;每个方法对应一个栈帧&#xff08;Stack Frame&#xff09; 2. 数据结构中的栈…...

408 计算机网络 知识点记忆(6)

前言 本文基于王道考研课程与湖科大计算机网络课程教学内容&#xff0c;系统梳理核心知识记忆点和框架&#xff0c;既为个人复习沉淀思考&#xff0c;亦希望能与同行者互助共进。&#xff08;PS&#xff1a;后续将持续迭代优化细节&#xff09; 往期内容 408 计算机网络 知识…...

从ETL到ELT:大数据时代下两者的选型建议及优势

随着大数据时代的到来&#xff0c;数据量呈爆炸式增长&#xff0c;数据类型日益复杂&#xff0c;ETL与ELT两种技术路径的抉择直接影响着数据处理效率。我们这次来深入解析下两种模式的本质差异与应用场景&#xff0c;为企业提供选型建议。 一、ETL架构的优势 ETL架构遵循“提…...

Java蓝桥杯习题一:for循环和字符串的应用

知道循环次数用for循环 练习题1 小明对数位中含有2.0.1.9的数字很感兴趣&#xff0c;在1到40中这样的数包含1.2.9.10至32.39.40&#xff0c;共28个&#xff0c;他们的和是574.请问&#xff0c;在1到2019中&#xff0c;所有这样的数的和是多少&#xff1f;&#xff08;2019Jav…...

Windows 图形显示驱动开发-WDDM 2.0功能_分配用法跟踪

随着分配列表的消失&#xff0c;视频内存管理器 (VidMm) 不再能够查看特定命令缓冲区中引用的分配。 因此&#xff0c;VidMm 不再能够跟踪分配使用情况和处理相关同步。 此责任现在由用户模式驱动程序 (UMD) 承担。 具体而言&#xff0c;UMD 需要处理与直接 CPU 访问分配和重命…...

SpringMVC的请求-文件上传

文件上传客户端三要素 1. 表单项type“file” 2. 表单的提交方式是post 3. 表单的enctype属性是多部分表单形式&#xff0c;及enctype“multipart/form-data” <% page contentType"text/html;charsetUTF-8" language"java" %> <html> <he…...

MySQL表的增删查改(基础)

一.插入数据 数据准备 create table student(id INT,sn INT comment 学号,name VARCHAR(20) comment 姓名,qq_mail VARCHAR(20) comment QQ邮箱 ); 1.单行数据全列插入 INSERT INTO student VALUES (100, 10000, 唐三藏, NULL); INSERT INTO student VALUES (101, 10001, …...

C++初阶-C++的讲解1

目录 1.缺省(sheng)参数 2.函数重载 3.引用 3.1引用的概念和定义 3.2引用的特性 3.3引用的使用 3.4const引用 3.5.指针和引用的关系 4.nullptr 5.总结 1.缺省(sheng)参数 &#xff08;1&#xff09;缺省参数是声明或定义是为函数的参数指定一个缺省值。在调用该函数是…...