Package: pyrtdb
pyrtdb - the python connector for rtdbProject Directory{ProjectDirPath}是Python客户端连接器的项目根目录Fetaures支持DB API 2.0(PEP 249)，详情可见resources/DB API 2.0使用c扩展，内部使用标准库ctypes(Python外部函数库)来调用c语言动态链接库的函数调用的C语言动态链接库libtsdb.so(或者tsdb.dll)是rtdb数据库官方对外的纯c语言接口动态链接库，rtdbcli的python连接器通过
调用该动态链接库来完成对rtdb数据库的操作。因为依赖于c扩展，所以在跨平台上必须依赖于具体操作系统的动态链接库RequirementsCpython: 3.6以上版本(32位或者64位)支持Linux操作系统、Windows操作系统(64位)、Windows操作系统(32位)；依赖于具体操作系统下的动态链接库rtdb的动态连接库libtsdb.so;目前rtdb包会根据当前Cpython解释器的版本(32位或者64位)来选择动态链接库Linux操作系统的动态连接库路径位于{PluginDirPath}/python/dynamiclib/linux/win32/libtsdb.soWindows32位操作系统的动态连接库路径位于{PluginDirPath}/python/dynamiclib/windows/win32/tsdb.dllWindows64位操作系统的动态连接库路径位于{PluginDirPath}/python/dynamiclib/windows/x64/tsdb.dllInstallation配置rtdbcli包的导入路径，以下三种方式任意选择一种即可通过代码将rtdbcli的包导入路径配置到系统路径importsys# 在导入rtdbcli之前需要将rtdbcli的包路径写入到系统路径sys.path.append(str(Path.cwd().parent))importpyrtdb配置Windows系统路径
在Windows系统框中，键入"高级系统设置"，打开高级系统设置窗口。按下环境变量按钮，系统变量部分中，找到并选择 PATH 环境变量。单击编辑。如果 PATH 环境变量不存在，请单击新建。在编辑系统变量（或新建系统变量）窗口中，指定 PATH 环境变量的值为上文{ProjectDirPath}/rtdbcli的绝对路径。单击确定。通过单击确定关闭所有剩余窗口。配置Linux系统路径(bash path)
通过修改用户目录下的~/.bashrc文件进行配置# 在最后一行加上exportPATH=$PATH:{ProjectDirPath}/pyrtdb目前rtdb包尚未上传到PyPI(Python官方第三方包索引)，所以无需通过PyPI进行下载安装。目前支持的用户使用方式是将rtdbcli的包路径配置到系统路径之后，可见如下示例
(代码示例位于{ProjectDirPath}/pyrtdb/examples/simple_example.py)。importsysfrompathlibimportPath# 必须确保{ProjectDirPath}/rtdbcli的路径已经配置到系统路径，否则会抛出异常ModuleNotFoundErrortry:importpyrtdbexceptModuleNotFoundError:importsys# 导入包路径sys.path.append(str(Path.cwd().parent))importpyrtdbDB=pyrtdb.connect(pyrtdb.RTDB_HOST,pyrtdb.RTDB_PORT,pyrtdb.RTDB_USER_NAME,pyrtdb.RTDB_PASSWORD)withDB:withDB.cursor()ascursor:cursor.execute("create database test_db if not exists;")cursor.execute("use test_db;")cursor.execute("create table users if not exists users(id bigint, email varchar(255), password varchar(255));")withDB.cursor()ascursor:sql="select last * from users;"cursor.execute(sql)# 获取一条记录result=cursor.fetchone()print(result)Documentationconnect(host: str, port: int, user: str, password: str, **kwargs)
connect是一个用于创建数据库连接的构造函数。该函数返回一个Connection对象。kwargs是可选的参数选项。该函数定义位于{ProjectDirPath}/pyrtdb/init.pyhost 需要连接的主机IP，必填，默认值是127.0.0.1port 需要连接的主机端口，必填, 默认值是9000user 用户名，必填password 用户密码，必填timeout(可选, 通过kwargs传递) 连接超时时间，默认值为30charset(可选) 表示数据库编码，数据库编码的默认值是CHARSET_WIN1
选项位于rtdbcli.constant.pyCHARSET_UNKNOWNCHARSET_GBKCHARSET_UTF8CHARSET_UCS2LECHARSET_UCS2BECHARSET_BIG5CHARSET_EUCJPCHARSET_SJISCHARSET_EUCKRCHARSET_ISO1CHARSET_WIN1CHARSET_WIN2dbname(可选) 需要连接的数据库名称，默认值为""apilevel
一个字符串常量，表示模块支持的DB API版本。目前只允许使用字符串"1.0"和字符串"2.0"来进行表示。该值默认是"2.0。该常量定义位于{ProjectDirPath}/pyrtdb/init.pythreadsafety
用于表示本模块接口所支持的线程安全级别。该常量定义位于{ProjectDirPath}/pyrtdb/init.py。默认值为1值为0，线程间不可“共享”模块值为1，含义表示线程间可以共享该模块，但是不可以共享连接值为2，模块及数据库连接均可以在"线程间"共享值为3，模块、数据库连接以及游标（cursors）均可以在线程间“共享”paramstyle
一个字符串常量，用于说明模块间接口所期望的参数标记。可选值如下。该常量定义位于{ProjectDirPath}/pyrtdb/init.pyqmark 问号风格numeric 数字配合位置参数风格named 命名参数风格format ANSI C printf代码风格pyformat Python的扩展格式化风格//qmarkCURSOR.execute("select * from students where name = ?",("Michael",))//numericCURSOR.execute("select * from students where name = :1",("Michael",))//namedCURSOR.execute("select * from students where name = :name",{'name':'Michael'})//formatCURSOR.execute("select * from students where name =%s",("Michael",))//pyformatCURSOR.execute("select * from students where name =%(name)s",("Michael",))CURSOR.execute("select * from students where name =%(name)s",{'name':'Michael'})目前paramstyle仅支持format格式Usage连接数据库并创建游标import pyrtdb

from pyrtdb.constant import RTDB_HOST, RTDB_PORT, RTDB_USER_NAME, RTDB_PASSWORD


DB = pyrtdb.connect(pyrtdb.RTDB_HOST, pyrtdb.RTDB_PORT, pyrtdb.RTDB_USER_NAME, pyrtdb.RTDB_PASSWORD)

CURSOR = DB.cursor()创建数据库CURSOR.execute("create database test_db if not exists;")CURSOR.execute("use test_db;")创建表CURSOR.execute("create table if not exists test_table(is_working boolean, age int, name char(100));")插入数据CURSOR.execute("insert into test_table(is_working, age, name) values(false, 12, 'Michael');")CURSOR.execute("insert into test_table(is_working, age, name) values(true, 18, 'Jane');")CURSOR.execute("insert into test_table(is_working, age, name) values(false, 12, 'Liming');")查询数据sql1="select last * from test_table;"CURSOR.execute(sql1)print("Fetch all tuple rows:{}".format(CURSOR.fetchall()))dictcur=DictCursor(DB)dictcur.execute(sql1)print("Fetch all dict rows:{}".format(dictcur.fetchall()))dictcur.close()sql2="select * from test_table where time between%sand%s"start=datetime.datetime.now()-datetime.timedelta(days=3)end=datetime.datetime.now()+datetime.timedelta(days=3)CURSOR.execute(sql2,(start,end,))print("Fetch all tuple rows:{}".format(CURSOR.fetchall()))sql3="select * from test_table where time between%sand%sand name =%s"CURSOR.execute(sql3,(start,end,"Michael",))sql3_rows=CURSOR.fetchall()print("Fetch all tuple rows:{}".format(sql3_rows))forrowinsql3_rows:assert(len(row)==4)assert(row[len(row)-1]=='Michael')ResourcesDB-API 2.0(PEP 249)https://www.python.org/dev/peps/pep-0249/LicenseGNU Lesser General Public License version 3