Python的凤凰数据库适配器
phoenixdb的Python项目详细描述
phoenixdb是用于访问 Phoenix SQL database 使用 remote query server。 图书馆实现了 标准DB API 2.0接口, 这对大多数python程序员来说应该很熟悉。
安装
安装库的最简单方法是使用pip:
pip install phoenixdb
您还可以从Bitbucket下载源代码, 提取存档文件,然后手动安装:
cd /path/to/python-phoenix-x.y.z/ python setup.py install
用法
这个库实现了标准的db api 2.0接口,因此它可以 使用与使用python中任何其他sql数据库相同的方法,例如:
import phoenixdb import phoenixdb.cursor database_url = 'http://localhost:8765/' conn = phoenixdb.connect(database_url, autocommit=True) cursor = conn.cursor() cursor.execute("CREATE TABLE users (id INTEGER PRIMARY KEY, username VARCHAR)") cursor.execute("UPSERT INTO users VALUES (?, ?)", (1, 'admin')) cursor.execute("SELECT * FROM users") print cursor.fetchall() cursor = conn.cursor(cursor_factory=phoenixdb.cursor.DictCursor) cursor.execute("SELECT * FROM users WHERE id=1") print cursor.fetchone()['USERNAME']
设置开发环境
如果您想快速试用包含的示例,可以设置 本地virtualenv和所有 必要条件:
virtualenv e source e/bin/activate pip install -r requirements.txt python setup.py develop
要创建或更新protobuf类,请在gen-protobuf.sh中更改标记并执行。
如果你需要一个phoenix服务器进行实验,你可以运行一个 快速使用Docker:
docker pull docker.oxygene.sk/lukas/python-phoenixdb/phoenix:4.11 docker run -p 127.0.0.1:8765:8765 docker.oxygene.sk/lukas/python-phoenixdb/phoenix:4.11
交互式SQL外壳
examples文件夹中有一个基于python的交互式shell,可以是 用于连接到Phoenix并执行查询:
./examples/shell.py http://localhost:8765/ db=> CREATE TABLE test (id INTEGER PRIMARY KEY, name VARCHAR); no rows affected (1.363 seconds) db=> UPSERT INTO test (id, name) VALUES (1, 'Lukas'); 1 row affected (0.004 seconds) db=> SELECT * FROM test; +------+-------+ | ID | NAME | +======+=======+ | 1 | Lukas | +------+-------+ 1 row selected (0.019 seconds)
运行测试套件
该库附带了一个测试套件,用于测试PythonDBAPI2.0的遵从性和 各种凤凰特有的功能。为了运行测试套件,您需要 运行phoenix数据库并设置PHOENIXDB_TEST_DB_URL环境变量:
export PHOENIXDB_TEST_DB_URL='http://localhost:8765/' nosetests
已知问题
- 总的来说,图书馆还没有经过战斗测试。你可能会遇到几乎任何问题。小心使用。
- 只能在自动提交模式下使用库。本机java phoenix库还实现了批处理upsert,可以一次提交,但这不会通过远程服务器公开。 (CALCITE-767)
- 菲尼克斯的时间和日期列存储为完整的时间戳,精确到毫秒, 但远程协议只公开时间(小时/分钟/秒)或日期(年/月/日) 部分柱子。(CALCITE-797,CALCITE-798)
- Phoenix中的时间戳列以纳秒级的精度存储,但远程协议将其截断为毫秒。(CALCITE-796)
- 不支持数组列。 (CALCITE-1050,PHOENIX-2585)