使用Python连接并操作Phoenix

1 相关工具

目前使用python连接Phoenix主要有两种方案:

  • 使用JayDeBeApi连接和操作Phoenix:官方文档
  • 使用phoenixdb连接和操作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 使用

  1. 创建连接
    连接函数是: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')
  1. 查询与其他操作
    代码如下:
## 创建cursor
curs = conn.cursor()
## 执行sql
curs.execute('select * from test_table')
## 获取查询结果
result = curs.fetchall()

需要注意的是jaydebeapi执行更新操作(如delete、upsert等)时并不会自动提交,所以执行完相关的操作后需要手动提交,代码如下:

conn.commit()

3 参考资料

  1. JayDeBeApi文档:https://github.com/baztian/jaydebeapi
  2. phoenixdb文档:https://python-phoenixdb.readthedocs.io/en/latest/

你可能感兴趣的:(使用Python连接并操作Phoenix)