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-797CALCITE-798
  • Phoenix中的时间戳列以纳秒级的精度存储,但远程协议将其截断为毫秒。(CALCITE-796
  • 不支持数组列。 (CALCITE-1050PHOENIX-2585

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
maven字段#getGenericType()抛出java。lang.TypeNotPresentException   用java绘制三角形的几何图形   java无法下载主题和发件人地址(rediff)   java如何使代码线程安全   java在尝试转换FileInputStream中的文件时,我遇到了一个FileNotFound异常   java Moxy和Jackson如何将Json映射到Pojo   在foreach循环中使用BufferedWriter生成新行的java问题   java为什么我的测试在单次执行中运行时间小于1秒,而在maven构建中运行时间大于20秒?   java如何显示下载附件的进度条   了解java rmi的良好实践   .net可以将Java portlet嵌入ASP。网页?   循环如何多次执行Java方法?   java如何确保用户输入在给定的有效范围内?   java单元测试定理   java如何在IntelliJ上运行外部构建项目?   JAVA:试图编写一个检查字符串是否为数字的方法。总是返回错误   javahadoop将特定键的所有map方法生成的所有值都发送到一个reduce方法,对吗?   在java中读取和使用文件