blob: 574a3173301e579f061e7a14f3d755989617fabd [file] [log] [blame]
(window.webpackJsonp=window.webpackJsonp||[]).push([[463],{863:function(t,s,a){"use strict";a.r(s);var n=a(29),e=Object(n.a)({},(function(){var t=this,s=t._self._c;return s("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[s("h1",{attrs:{id:"python-原生接口"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#python-原生接口"}},[t._v("#")]),t._v(" Python 原生接口")]),t._v(" "),s("h2",{attrs:{id:"依赖"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#依赖"}},[t._v("#")]),t._v(" 依赖")]),t._v(" "),s("p",[t._v("在使用 Python 原生接口包前,您需要安装 thrift (>=0.13) 依赖。")]),t._v(" "),s("h2",{attrs:{id:"如何使用-示例"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#如何使用-示例"}},[t._v("#")]),t._v(" 如何使用 (示例)")]),t._v(" "),s("p",[t._v("首先下载包:"),s("code",[t._v("pip3 install apache-iotdb")])]),t._v(" "),s("p",[t._v("您可以从这里得到一个使用该包进行数据读写的例子:"),s("a",{attrs:{href:"https://github.com/apache/iotdb/blob/master/client-py/SessionExample.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("Session Example"),s("OutboundLink")],1)]),t._v(" "),s("p",[t._v("关于对齐时间序列读写的例子:"),s("a",{attrs:{href:"https://github.com/apache/iotdb/blob/master/client-py/SessionAlignedTimeseriesExample.py",target:"_blank",rel:"noopener noreferrer"}},[t._v("Aligned Timeseries Session Example"),s("OutboundLink")],1)]),t._v(" "),s("p",[t._v("(您需要在文件的头部添加"),s("code",[t._v("import iotdb")]),t._v(")")]),t._v(" "),s("p",[t._v("或者:")]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" iotdb"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Session "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Session\n\nip "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),t._v("\nport_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6667"')]),t._v("\nusername_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"root"')]),t._v("\npassword_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"root"')]),t._v("\nsession "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ip"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" port_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" username_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsession"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nzone "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get_time_zone"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsession"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("close"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br")])]),s("h2",{attrs:{id:"基本接口说明"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#基本接口说明"}},[t._v("#")]),t._v(" 基本接口说明")]),t._v(" "),s("p",[t._v("下面将给出 Session 对应的接口的简要介绍和对应参数:")]),t._v(" "),s("h3",{attrs:{id:"初始化"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#初始化"}},[t._v("#")]),t._v(" 初始化")]),t._v(" "),s("ul",[s("li",[t._v("初始化 Session")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ip"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" port_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" username_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" fetch_size"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1024")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" zone_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"UTC+8"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("开启 Session,并决定是否开启 RPC 压缩")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("enable_rpc_compression"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("p",[t._v("注意: 客户端的 RPC 压缩开启状态需和服务端一致")]),t._v(" "),s("ul",[s("li",[t._v("关闭 Session")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("close"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h3",{attrs:{id:"数据定义接口-ddl"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#数据定义接口-ddl"}},[t._v("#")]),t._v(" 数据定义接口 DDL")]),t._v(" "),s("h4",{attrs:{id:"存储组管理"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#存储组管理"}},[t._v("#")]),t._v(" 存储组管理")]),t._v(" "),s("ul",[s("li",[t._v("设置存储组")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("set_storage_group"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("group_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("删除单个或多个存储组")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("delete_storage_group"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("group_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsession"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("delete_storage_groups"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("group_name_lst"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br")])]),s("h4",{attrs:{id:"时间序列管理"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#时间序列管理"}},[t._v("#")]),t._v(" 时间序列管理")]),t._v(" "),s("ul",[s("li",[t._v("创建单个或多个时间序列")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("create_time_series"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ts_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data_type"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" encoding"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" compressor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n props"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tags"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" attributes"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" alias"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n \nsession"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("create_multi_time_series"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n ts_path_lst"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data_type_lst"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" encoding_lst"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" compressor_lst"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n props_lst"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" tags_lst"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" attributes_lst"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" alias_lst"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("None")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br")])]),s("ul",[s("li",[t._v("创建对齐时间序列")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("create_aligned_time_series"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n device_id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" measurements_lst"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data_type_lst"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" encoding_lst"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" compressor_lst\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("p",[t._v("注意:目前"),s("strong",[t._v("暂不支持")]),t._v("使用传感器别名。")]),t._v(" "),s("ul",[s("li",[t._v("删除一个或多个时间序列")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("delete_time_series"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("paths_list"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("检测时间序列是否存在")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("check_time_series_exists"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h3",{attrs:{id:"数据操作接口-dml"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#数据操作接口-dml"}},[t._v("#")]),t._v(" 数据操作接口 DML")]),t._v(" "),s("h4",{attrs:{id:"数据写入"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#数据写入"}},[t._v("#")]),t._v(" 数据写入")]),t._v(" "),s("p",[t._v("推荐使用 insert_tablet 帮助提高写入效率")]),t._v(" "),s("ul",[s("li",[t._v("插入一个 Tablet,Tablet 是一个设备若干行数据块,每一行的列都相同\n"),s("ul",[s("li",[s("strong",[t._v("写入效率高")])]),t._v(" "),s("li",[s("strong",[t._v("支持写入空值")]),t._v(" (0.13 版本起)")])])])]),t._v(" "),s("p",[t._v("Python API 里目前有两种 Tablet 实现")]),t._v(" "),s("ul",[s("li",[t._v("普通 Tablet")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("values_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("11")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10011.1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test01"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("True")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("11111")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.25")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("101.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test02"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("188.1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("688.25")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test03"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("True")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("6.25")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test04"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\ntimestamps_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\ntablet_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Tablet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n device_id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" measurements_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data_types_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" values_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" timestamps_\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsession"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("insert_tablet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("tablet_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br")])]),s("ul",[s("li",[t._v("Numpy Tablet")])]),t._v(" "),s("p",[t._v("相较于普通 Tablet,Numpy Tablet 使用 "),s("a",{attrs:{href:"https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("numpy.ndarray"),s("OutboundLink")],1),t._v(" 来记录数值型数据。\n内存占用和序列化耗时会降低很多,写入效率也会有很大提升。")]),t._v(" "),s("p",[s("strong",[t._v("注意")])]),t._v(" "),s("ol",[s("li",[t._v("Tablet 中的每一列时间戳和值记录为一个 ndarray")]),t._v(" "),s("li",[t._v("ndarray 推荐使用如下面例子中的特定的 dtype,如果不使用,不会影响正确性。")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("data_types_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n TSDataType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("BOOLEAN"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n TSDataType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("INT32"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n TSDataType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("INT64"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n TSDataType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("FLOAT"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n TSDataType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("DOUBLE"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n TSDataType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("TEXT"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\nnp_values_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n np"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("array"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("True")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("True")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" TSDataType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("BOOLEAN"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("np_dtype"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n np"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("array"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("100")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" TSDataType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("INT32"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("np_dtype"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n np"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("array"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("11")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("11111")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" TSDataType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("INT64"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("np_dtype"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n np"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("array"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1.25")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("188.1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" TSDataType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("FLOAT"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("np_dtype"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n np"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("array"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("10011.1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("101.0")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("688.25")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("6.25")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" TSDataType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("DOUBLE"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("np_dtype"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n np"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("array"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test01"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test02"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test03"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"test04"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" TSDataType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("TEXT"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("np_dtype"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\nnp_timestamps_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" np"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("array"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" TSDataType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("INT64"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("np_dtype"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nnp_tablet_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" NumpyTablet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"root.sg_test_01.d_02"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" measurements_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data_types_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" np_values_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" np_timestamps_\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsession"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("insert_tablet"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("np_tablet_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br"),s("span",{staticClass:"line-number"},[t._v("18")]),s("br"),s("span",{staticClass:"line-number"},[t._v("19")]),s("br"),s("span",{staticClass:"line-number"},[t._v("20")]),s("br"),s("span",{staticClass:"line-number"},[t._v("21")]),s("br")])]),s("ul",[s("li",[t._v("插入多个 Tablet")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("insert_tablets"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("tablet_lst"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("插入一个 Record,一个 Record 是一个设备一个时间戳下多个测点的数据。")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("insert_record"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("device_id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" timestamp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" measurements_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data_types_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" values_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("插入多个 Record")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("insert_records"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n device_ids_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" time_list_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" measurements_list_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data_type_list_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" values_list_\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("ul",[s("li",[t._v("插入同属于一个 device 的多个 Record")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("insert_records_of_one_device"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("device_id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" time_list"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" measurements_list"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data_types_list"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" values_list"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h4",{attrs:{id:"带有类型推断的写入"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#带有类型推断的写入"}},[t._v("#")]),t._v(" 带有类型推断的写入")]),t._v(" "),s("p",[t._v('当数据均是 String 类型时,我们可以使用如下接口,根据 value 的值进行类型推断。例如:value 为 "true" ,就可以自动推断为布尔类型。value 为 "3.2" ,就可以自动推断为数值类型。服务器需要做类型推断,可能会有额外耗时,速度较无需类型推断的写入慢')]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("insert_str_record"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("device_id"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" timestamp"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" measurements"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" string_values"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h4",{attrs:{id:"对齐时间序列的写入"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#对齐时间序列的写入"}},[t._v("#")]),t._v(" 对齐时间序列的写入")]),t._v(" "),s("p",[t._v("对齐时间序列的写入使用 insert_aligned_xxx 接口,其余与上述接口类似:")]),t._v(" "),s("ul",[s("li",[t._v("insert_aligned_record")]),t._v(" "),s("li",[t._v("insert_aligned_records")]),t._v(" "),s("li",[t._v("insert_aligned_records_of_one_device")]),t._v(" "),s("li",[t._v("insert_aligned_tablet")]),t._v(" "),s("li",[t._v("insert_aligned_tablets")])]),t._v(" "),s("h3",{attrs:{id:"iotdb-sql-接口"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#iotdb-sql-接口"}},[t._v("#")]),t._v(" IoTDB-SQL 接口")]),t._v(" "),s("ul",[s("li",[t._v("执行查询语句")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("execute_query_statement"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sql"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("执行非查询语句")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("execute_non_query_statement"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sql"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("执行语句")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("execute_statement"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sql"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h3",{attrs:{id:"元数据模版接口"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#元数据模版接口"}},[t._v("#")]),t._v(" 元数据模版接口")]),t._v(" "),s("h4",{attrs:{id:"构建元数据模版"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#构建元数据模版"}},[t._v("#")]),t._v(" 构建元数据模版")]),t._v(" "),s("ol",[s("li",[t._v("首先构建Template类")]),t._v(" "),s("li",[t._v("添加子节点,可以选择InternalNode或MeasurementNode")]),t._v(" "),s("li",[t._v("调用创建元数据模版接口")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("template "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("template_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" share_time"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("True")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\ni_node_gps "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" InternalNode"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"GPS"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" share_time"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\ni_node_v "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" InternalNode"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("name"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"vehicle"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" share_time"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("True")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nm_node_x "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" MeasurementNode"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"x"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" TSDataType"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("FLOAT"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" TSEncoding"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("RLE"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Compressor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("SNAPPY"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\ni_node_gps"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("add_child"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("m_node_x"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\ni_node_v"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("add_child"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("m_node_x"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\ntemplate"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("add_template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i_node_gps"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\ntemplate"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("add_template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("i_node_v"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\ntemplate"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("add_template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("m_node_x"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nsession"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("create_schema_template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br")])]),s("h4",{attrs:{id:"修改模版节点信息"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#修改模版节点信息"}},[t._v("#")]),t._v(" 修改模版节点信息")]),t._v(" "),s("p",[t._v("修改模版节点,其中修改的模版必须已经被创建。以下函数能够在已经存在的模版中增加或者删除物理量")]),t._v(" "),s("ul",[s("li",[t._v("在模版中增加实体")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("add_measurements_in_template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" measurements_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" data_types"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" encodings"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" compressors"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" is_aligned"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("在模版中删除物理量")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("delete_node_in_template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h4",{attrs:{id:"挂载元数据模板"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#挂载元数据模板"}},[t._v("#")]),t._v(" 挂载元数据模板")]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("set_schema_template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" prefix_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h4",{attrs:{id:"卸载元数据模版"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#卸载元数据模版"}},[t._v("#")]),t._v(" 卸载元数据模版")]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("unset_schema_template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" prefix_path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h4",{attrs:{id:"查看元数据模版"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#查看元数据模版"}},[t._v("#")]),t._v(" 查看元数据模版")]),t._v(" "),s("ul",[s("li",[t._v("查看所有的元数据模版")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("show_all_templates"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("查看元数据模版中的物理量个数")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("count_measurements_in_template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("判断某个节点是否为物理量,该节点必须已经在元数据模版中")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("count_measurements_in_template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("判断某个路径是否在元数据模版中,这个路径有可能不在元数据模版中")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("is_path_exist_in_template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" path"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("查看某个元数据模板下的物理量")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("show_measurements_in_template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("查看挂载了某个元数据模板的路径前缀")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("show_paths_template_set_on"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("ul",[s("li",[t._v("查看使用了某个元数据模板(即序列已创建)的路径前缀")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("show_paths_template_using_on"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("template_name"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h4",{attrs:{id:"删除元数据模版"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#删除元数据模版"}},[t._v("#")]),t._v(" 删除元数据模版")]),t._v(" "),s("p",[t._v("删除已经存在的元数据模版,不支持删除已经挂载的模版")]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("drop_schema_template"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"template_python"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h3",{attrs:{id:"对-pandas-的支持"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#对-pandas-的支持"}},[t._v("#")]),t._v(" 对 Pandas 的支持")]),t._v(" "),s("p",[t._v("我们支持将查询结果轻松地转换为 "),s("a",{attrs:{href:"https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("Pandas Dataframe"),s("OutboundLink")],1),t._v("。")]),t._v(" "),s("p",[t._v("SessionDataSet 有一个方法"),s("code",[t._v(".todf()")]),t._v(",它的作用是消费 SessionDataSet 中的数据,并将数据转换为 pandas dataframe。")]),t._v(" "),s("p",[t._v("例子:")]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" iotdb"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Session "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Session\n\nip "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),t._v("\nport_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6667"')]),t._v("\nusername_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"root"')]),t._v("\npassword_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"root"')]),t._v("\nsession "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ip"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" port_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" username_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsession"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nresult "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("execute_query_statement"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SELECT ** FROM root"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Transform to Pandas Dataset")]),t._v("\ndf "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" result"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("todf"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nsession"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("close"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token comment"}},[t._v("# Now you can work with the dataframe")]),t._v("\ndf "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br")])]),s("h3",{attrs:{id:"iotdb-testcontainer"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#iotdb-testcontainer"}},[t._v("#")]),t._v(" IoTDB Testcontainer")]),t._v(" "),s("p",[t._v("Python 客户端对测试的支持是基于"),s("code",[t._v("testcontainers")]),t._v("库 (https://testcontainers-python.readthedocs.io/en/latest/index.html) 的,如果您想使用该特性,就需要将其安装到您的项目中。")]),t._v(" "),s("p",[t._v("要在 Docker 容器中启动(和停止)一个 IoTDB 数据库,只需这样做:")]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("MyTestCase")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("unittest"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("TestCase"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("def")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("test_something")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("self"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("with")]),t._v(" IoTDBContainer"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("as")]),t._v(" c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n session "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"localhost"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" c"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get_exposed_port"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("6667")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"root"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"root"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n result "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("execute_query_statement"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SHOW TIMESERIES"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("result"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("close"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br")])]),s("p",[t._v("默认情况下,它会拉取最新的 IoTDB 镜像 "),s("code",[t._v("apache/iotdb:latest")]),t._v("进行测试,如果您想指定待测 IoTDB 的版本,您只需要将版本信息像这样声明:"),s("code",[t._v('IoTDBContainer("apache/iotdb:0.12.0")')]),t._v(",此时,您就会得到一个"),s("code",[t._v("0.12.0")]),t._v("版本的 IoTDB 实例。")]),t._v(" "),s("h3",{attrs:{id:"iotdb-dbapi"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#iotdb-dbapi"}},[t._v("#")]),t._v(" IoTDB DBAPI")]),t._v(" "),s("p",[t._v("IoTDB DBAPI 遵循 Python DB API 2.0 规范 (https://peps.python.org/pep-0249/),实现了通过Python语言访问数据库的通用接口。")]),t._v(" "),s("h4",{attrs:{id:"例子"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#例子"}},[t._v("#")]),t._v(" 例子")]),t._v(" "),s("ul",[s("li",[t._v("初始化")])]),t._v(" "),s("p",[t._v("初始化的参数与Session部分保持一致(sqlalchemy_mode参数除外,该参数仅在SQLAlchemy方言中使用)")]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" iotdb"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dbapi "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" connect\n\nip "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),t._v("\nport_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6667"')]),t._v("\nusername_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"root"')]),t._v("\npassword_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"root"')]),t._v("\nconn "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" connect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ip"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" port_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" username_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("fetch_size"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1024")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("zone_id"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"UTC+8"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("sqlalchemy_mode"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\ncursor "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" conn"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("cursor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br")])]),s("ul",[s("li",[t._v("执行简单的SQL语句")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("cursor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("execute"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SELECT ** FROM root"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" row "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" cursor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fetchall"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("row"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("ul",[s("li",[t._v("执行带有参数的SQL语句")])]),t._v(" "),s("p",[t._v("IoTDB DBAPI 支持pyformat风格的参数")]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("cursor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("execute"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SELECT ** FROM root WHERE time < %(time)s"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"time"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"2017-11-01T00:08:00.000"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" row "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" cursor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fetchall"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("row"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br")])]),s("ul",[s("li",[t._v("批量执行带有参数的SQL语句")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("seq_of_parameters "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"timestamp"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"temperature"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"timestamp"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"temperature"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("2")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"timestamp"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"temperature"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("3")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"timestamp"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"temperature"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("4")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"timestamp"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"temperature"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("5")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),t._v("\nsql "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"insert into root.cursor(timestamp,temperature) values(%(timestamp)s,%(temperature)s)"')]),t._v("\ncursor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("executemany"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("sql"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("seq_of_parameters"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br")])]),s("ul",[s("li",[t._v("关闭连接")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[t._v("cursor"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("close"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nconn"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("close"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br")])]),s("h3",{attrs:{id:"iotdb-sqlalchemy-dialect-实验性"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#iotdb-sqlalchemy-dialect-实验性"}},[t._v("#")]),t._v(" IoTDB SQLAlchemy Dialect(实验性)")]),t._v(" "),s("p",[t._v("IoTDB的SQLAlchemy方言主要是为了适配Apache superset而编写的,该部分仍在完善中,请勿在生产环境中使用!")]),t._v(" "),s("h4",{attrs:{id:"元数据模型映射"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#元数据模型映射"}},[t._v("#")]),t._v(" 元数据模型映射")]),t._v(" "),s("p",[t._v("SQLAlchemy 所使用的数据模型为关系数据模型,这种数据模型通过表格来描述不同实体之间的关系。\n而 IoTDB 的数据模型为层次数据模型,通过树状结构来对数据进行组织。\n为了使 IoTDB 能够适配 SQLAlchemy 的方言,需要对 IoTDB 中原有的数据模型进行重新组织,\n把 IoTDB 的数据模型转换成 SQLAlchemy 的数据模型。")]),t._v(" "),s("p",[t._v("IoTDB 中的元数据有:")]),t._v(" "),s("ol",[s("li",[t._v("Storage Group:存储组")]),t._v(" "),s("li",[t._v("Path:存储路径")]),t._v(" "),s("li",[t._v("Entity:实体")]),t._v(" "),s("li",[t._v("Measurement:物理量")])]),t._v(" "),s("p",[t._v("SQLAlchemy 中的元数据有:")]),t._v(" "),s("ol",[s("li",[t._v("Schema:数据模式")]),t._v(" "),s("li",[t._v("Table:数据表")]),t._v(" "),s("li",[t._v("Column:数据列")])]),t._v(" "),s("p",[t._v("它们之间的映射关系为:")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("SQLAlchemy中的元数据")]),t._v(" "),s("th",[t._v("IoTDB中对应的元数据")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("Schema")]),t._v(" "),s("td",[t._v("Storage Group")])]),t._v(" "),s("tr",[s("td",[t._v("Table")]),t._v(" "),s("td",[t._v("Path ( from storage group to entity ) + Entity")])]),t._v(" "),s("tr",[s("td",[t._v("Column")]),t._v(" "),s("td",[t._v("Measurement")])])])]),t._v(" "),s("p",[t._v("下图更加清晰的展示了二者的映射关系:")]),t._v(" "),s("p",[s("img",{attrs:{src:"https://github.com/apache/iotdb-bin-resources/blob/main/docs/UserGuide/API/IoTDB-SQLAlchemy/sqlalchemy-to-iotdb.png?raw=true",alt:"sqlalchemy-to-iotdb"}})]),t._v(" "),s("h4",{attrs:{id:"数据类型映射"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#数据类型映射"}},[t._v("#")]),t._v(" 数据类型映射")]),t._v(" "),s("table",[s("thead",[s("tr",[s("th",[t._v("IoTDB 中的数据类型")]),t._v(" "),s("th",[t._v("SQLAlchemy 中的数据类型")])])]),t._v(" "),s("tbody",[s("tr",[s("td",[t._v("BOOLEAN")]),t._v(" "),s("td",[t._v("Boolean")])]),t._v(" "),s("tr",[s("td",[t._v("INT32")]),t._v(" "),s("td",[t._v("Integer")])]),t._v(" "),s("tr",[s("td",[t._v("INT64")]),t._v(" "),s("td",[t._v("BigInteger")])]),t._v(" "),s("tr",[s("td",[t._v("FLOAT")]),t._v(" "),s("td",[t._v("Float")])]),t._v(" "),s("tr",[s("td",[t._v("DOUBLE")]),t._v(" "),s("td",[t._v("Float")])]),t._v(" "),s("tr",[s("td",[t._v("TEXT")]),t._v(" "),s("td",[t._v("Text")])]),t._v(" "),s("tr",[s("td",[t._v("LONG")]),t._v(" "),s("td",[t._v("BigInteger")])])])]),t._v(" "),s("h4",{attrs:{id:"example"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#example"}},[t._v("#")]),t._v(" Example")]),t._v(" "),s("ul",[s("li",[t._v("执行语句")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" sqlalchemy "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" create_engine\n\nengine "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" create_engine"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"iotdb://root:root@127.0.0.1:6667"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nconnect "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" engine"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("connect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nresult "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" connect"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("execute"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"SELECT ** FROM root"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" row "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" result"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("fetchall"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("row"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br")])]),s("ul",[s("li",[t._v("ORM (目前只支持简单的查询)")])]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" sqlalchemy "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" create_engine"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Column"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" Float"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" BigInteger"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" MetaData\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" sqlalchemy"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("ext"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("declarative "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" declarative_base\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" sqlalchemy"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("orm "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" sessionmaker\n\nmetadata "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" MetaData"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n schema"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v("'root.factory'")]),t._v("\n"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nBase "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" declarative_base"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("metadata"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("metadata"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("Device")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Base"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n __tablename__ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"room2.device1"')]),t._v("\n Time "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Column"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("BigInteger"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" primary_key"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("True")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n temperature "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Column"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Float"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n status "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Column"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Float"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n\nengine "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" create_engine"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"iotdb://root:root@127.0.0.1:6667"')]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nDbSession "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" sessionmaker"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("bind"),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("engine"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsession "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" DbSession"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\nres "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("query"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Device"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("status"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("filter")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Device"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("temperature "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token number"}},[t._v("1")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n\n"),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("for")]),t._v(" row "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("in")]),t._v(" res"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v("\n "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("print")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("row"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br"),s("span",{staticClass:"line-number"},[t._v("11")]),s("br"),s("span",{staticClass:"line-number"},[t._v("12")]),s("br"),s("span",{staticClass:"line-number"},[t._v("13")]),s("br"),s("span",{staticClass:"line-number"},[t._v("14")]),s("br"),s("span",{staticClass:"line-number"},[t._v("15")]),s("br"),s("span",{staticClass:"line-number"},[t._v("16")]),s("br"),s("span",{staticClass:"line-number"},[t._v("17")]),s("br"),s("span",{staticClass:"line-number"},[t._v("18")]),s("br"),s("span",{staticClass:"line-number"},[t._v("19")]),s("br"),s("span",{staticClass:"line-number"},[t._v("20")]),s("br"),s("span",{staticClass:"line-number"},[t._v("21")]),s("br"),s("span",{staticClass:"line-number"},[t._v("22")]),s("br"),s("span",{staticClass:"line-number"},[t._v("23")]),s("br"),s("span",{staticClass:"line-number"},[t._v("24")]),s("br"),s("span",{staticClass:"line-number"},[t._v("25")]),s("br"),s("span",{staticClass:"line-number"},[t._v("26")]),s("br")])]),s("h2",{attrs:{id:"给开发人员"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#给开发人员"}},[t._v("#")]),t._v(" 给开发人员")]),t._v(" "),s("h3",{attrs:{id:"介绍"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#介绍"}},[t._v("#")]),t._v(" 介绍")]),t._v(" "),s("p",[t._v("这是一个使用 thrift rpc 接口连接到 IoTDB 的示例。在 Windows 和 Linux 上操作几乎是一样的,但要注意路径分隔符等不同之处。")]),t._v(" "),s("h3",{attrs:{id:"依赖-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#依赖-2"}},[t._v("#")]),t._v(" 依赖")]),t._v(" "),s("p",[t._v("首选 Python3.7 或更高版本。")]),t._v(" "),s("p",[t._v("必须安装 thrift(0.11.0 或更高版本)才能将 thrift 文件编译为 Python 代码。下面是官方的安装教程,最终,您应该得到一个 thrift 可执行文件。")]),t._v(" "),s("div",{staticClass:"language- line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-text"}},[s("code",[t._v("http://thrift.apache.org/docs/install/\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("p",[t._v("在开始之前,您还需要在 Python 环境中安装"),s("code",[t._v("requirements_dev.txt")]),t._v("中的其他依赖:")]),t._v(" "),s("div",{staticClass:"language-shell line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-shell"}},[s("code",[t._v("pip "),s("span",{pre:!0,attrs:{class:"token function"}},[t._v("install")]),t._v(" -r requirements_dev.txt\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br")])]),s("h3",{attrs:{id:"编译-thrift-库并调试"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#编译-thrift-库并调试"}},[t._v("#")]),t._v(" 编译 thrift 库并调试")]),t._v(" "),s("p",[t._v("在 IoTDB 源代码文件夹的根目录下,运行"),s("code",[t._v("mvn clean generate-sources -pl client-py -am")]),t._v(",")]),t._v(" "),s("p",[t._v("这个指令将自动删除"),s("code",[t._v("iotdb/thrift")]),t._v("中的文件,并使用新生成的 thrift 文件重新填充该文件夹。")]),t._v(" "),s("p",[t._v("这个文件夹在 git 中会被忽略,并且"),s("strong",[t._v("永远不应该被推到 git 中!")])]),t._v(" "),s("p",[s("strong",[t._v("注意")]),t._v("不要将"),s("code",[t._v("iotdb/thrift")]),t._v("上传到 git 仓库中 !")]),t._v(" "),s("h3",{attrs:{id:"session-客户端-使用示例"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#session-客户端-使用示例"}},[t._v("#")]),t._v(" Session 客户端 & 使用示例")]),t._v(" "),s("p",[t._v("我们将 thrift 接口打包到"),s("code",[t._v("client-py/src/iotdb/session.py")]),t._v("中(与 Java 版本类似),还提供了一个示例文件"),s("code",[t._v("client-py/src/SessionExample.py")]),t._v("来说明如何使用 Session 模块。请仔细阅读。")]),t._v(" "),s("p",[t._v("另一个简单的例子:")]),t._v(" "),s("div",{staticClass:"language-python line-numbers-mode"},[s("pre",{pre:!0,attrs:{class:"language-python"}},[s("code",[s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("from")]),t._v(" iotdb"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("Session "),s("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("import")]),t._v(" Session\n\nip "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"127.0.0.1"')]),t._v("\nport_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"6667"')]),t._v("\nusername_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"root"')]),t._v("\npassword_ "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),s("span",{pre:!0,attrs:{class:"token string"}},[t._v('"root"')]),t._v("\nsession "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ip"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" port_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" username_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" password_"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsession"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),s("span",{pre:!0,attrs:{class:"token builtin"}},[t._v("open")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("False")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nzone "),s("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" session"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("get_time_zone"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\nsession"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("close"),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),s("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])]),t._v(" "),s("div",{staticClass:"line-numbers-wrapper"},[s("span",{staticClass:"line-number"},[t._v("1")]),s("br"),s("span",{staticClass:"line-number"},[t._v("2")]),s("br"),s("span",{staticClass:"line-number"},[t._v("3")]),s("br"),s("span",{staticClass:"line-number"},[t._v("4")]),s("br"),s("span",{staticClass:"line-number"},[t._v("5")]),s("br"),s("span",{staticClass:"line-number"},[t._v("6")]),s("br"),s("span",{staticClass:"line-number"},[t._v("7")]),s("br"),s("span",{staticClass:"line-number"},[t._v("8")]),s("br"),s("span",{staticClass:"line-number"},[t._v("9")]),s("br"),s("span",{staticClass:"line-number"},[t._v("10")]),s("br")])]),s("h3",{attrs:{id:"测试"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#测试"}},[t._v("#")]),t._v(" 测试")]),t._v(" "),s("p",[t._v("请在"),s("code",[t._v("tests")]),t._v("文件夹中添加自定义测试。")]),t._v(" "),s("p",[t._v("要运行所有的测试,只需在根目录中运行"),s("code",[t._v("pytest .")]),t._v("即可。")]),t._v(" "),s("p",[s("strong",[t._v("注意")]),t._v("一些测试需要在您的系统上使用 docker,因为测试的 IoTDB 实例是使用 "),s("a",{attrs:{href:"https://testcontainers-python.readthedocs.io/en/latest/index.html",target:"_blank",rel:"noopener noreferrer"}},[t._v("testcontainers"),s("OutboundLink")],1),t._v(" 在 docker 容器中启动的。")]),t._v(" "),s("h3",{attrs:{id:"其他工具"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#其他工具"}},[t._v("#")]),t._v(" 其他工具")]),t._v(" "),s("p",[s("a",{attrs:{href:"https://pypi.org/project/black/",target:"_blank",rel:"noopener noreferrer"}},[t._v("black"),s("OutboundLink")],1),t._v(" 和 "),s("a",{attrs:{href:"https://pypi.org/project/flake8/",target:"_blank",rel:"noopener noreferrer"}},[t._v("flake8"),s("OutboundLink")],1),t._v(" 分别用于自动格式化和 linting。\n它们可以通过 "),s("code",[t._v("black .")]),t._v(" 或 "),s("code",[t._v("flake8 .")]),t._v(" 分别运行。")]),t._v(" "),s("h2",{attrs:{id:"发版"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#发版"}},[t._v("#")]),t._v(" 发版")]),t._v(" "),s("p",[t._v("要进行发版,")]),t._v(" "),s("p",[t._v("只需确保您生成了正确的 thrift 代码,")]),t._v(" "),s("p",[t._v("运行了 linting 并进行了自动格式化,")]),t._v(" "),s("p",[t._v("然后,确保所有测试都正常通过(通过"),s("code",[t._v("pytest .")]),t._v("),")]),t._v(" "),s("p",[t._v("最后,您就可以将包发布到 pypi 了。")]),t._v(" "),s("h3",{attrs:{id:"准备您的环境"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#准备您的环境"}},[t._v("#")]),t._v(" 准备您的环境")]),t._v(" "),s("p",[t._v("首先,通过"),s("code",[t._v("pip install -r requirements_dev.txt")]),t._v("安装所有必要的开发依赖。")]),t._v(" "),s("h3",{attrs:{id:"发版-2"}},[s("a",{staticClass:"header-anchor",attrs:{href:"#发版-2"}},[t._v("#")]),t._v(" 发版")]),t._v(" "),s("p",[t._v("有一个脚本"),s("code",[t._v("release.sh")]),t._v("可以用来执行发版的所有步骤。")]),t._v(" "),s("p",[t._v("这些步骤包括:")]),t._v(" "),s("ul",[s("li",[s("p",[t._v("删除所有临时目录(如果存在)")])]),t._v(" "),s("li",[s("p",[t._v("(重新)通过 mvn 生成所有必须的源代码")])]),t._v(" "),s("li",[s("p",[t._v("运行 linting (flke8)")])]),t._v(" "),s("li",[s("p",[t._v("通过 pytest 运行测试")])]),t._v(" "),s("li",[s("p",[t._v("Build")])]),t._v(" "),s("li",[s("p",[t._v("发布到 pypi")])])])])}),[],!1,null,null,null);s.default=e.exports}}]);