1 相关工具
目前使用python连接Phoenix主要有两种方案:
根据phoenixdb官方文档我并没有成功连接到Phoenix。目前,我只使用JayDeBeApi成功连接和操作Phoenix。所以接下来介绍JayDeBeApi的使用。
2 使用JayDeBeApi连接Phoenix
2.1 什么是JayDeBeApi
JayDeBeApi是一个允许用户使用Python通过Java JDBC驱动连接数据库的开源工具。理论上可以兼容所有的JDBC驱动,目前经官方测试通过的数据库有:SQLite、Hypersonic SQL (HSQLDB)、IBM DB2、IBM DB2 for mainframes、Oracle、Teradata DB、Netezza、Mimer DB、Microsoft SQL Server、MySQL、PostgreSQL。
其中没有Phoenix,但是经过测试发现也可以成功连接并操作Phoenix的。
2.2 安装
使用pip
安装即可
pip install JayDeBeApi
2.3 使用
-
创建连接
连接函数是:jaydebeapi.connect(jclassname, url, driver_args=None, jars=None, libs=None)
,参数解释如下
-
jclassname
: 是驱动的类名,这里的类名就是:org.apache.phoenix.jdbc.PhoenixDriver
-
url
: jdbc的连接url -
driver_args
: 驱动的参数 -
jars
: jar包的路径
连接代码如下:
import jaydebeapi
conn = jaydebeapi.connect(
'org.apache.phoenix.jdbc.PhoenixDriver',
'jdbc:phoenix:DB-test4,DB-test5,DB-test6:2181',
{},
'phoenix-4.13.2-cdh5.11.2-client.jar')
如果出现如下的错误,则需要设置phoenix.schema.isNamespaceMappingEnabled
的值设置为true:
java.sql.SQLExceptionPyRaisable: java.sql.SQLException: ERROR 726 (43M10): Inconsistent namespace mapping properties.. Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.isNamespaceMappingEnabled enabled
具体的设置方法是在第三个参数中添加相应的属性和值, 代码如下:
conn = jaydebeapi.connect(
'org.apache.phoenix.jdbc.PhoenixDriver',
'jdbc:phoenix:DB-test4,DB-test5,DB-test6:2181',
{'phoenix.schema.isNamespaceMappingEnabled': 'true'},
'/Users/xxx/bin/phoenix-4.13.2-cdh5.11.2-client.jar')
-
查询与其他操作
代码如下:
## 创建cursor
curs = conn.cursor()
## 执行sql
curs.execute('select * from test_table')
## 获取查询结果
result = curs.fetchall()
需要注意的是jaydebeapi执行更新操作(如delete、upsert等)时并不会自动提交,所以执行完相关的操作后需要手动提交,代码如下:
conn.commit()
3 参考资料
- JayDeBeApi文档:https://github.com/baztian/jaydebeapi
- phoenixdb文档:https://python-phoenixdb.readthedocs.io/en/latest/