1 相關(guān)工具
目前使用python連接Phoenix主要有兩種方案:
根據(jù)phoenixdb官方文檔我并沒有成功連接到Phoenix。目前,我只使用JayDeBeApi成功連接和操作Phoenix。所以接下來介紹JayDeBeApi的使用。
2 使用JayDeBeApi連接Phoenix
2.1 什么是JayDeBeApi
JayDeBeApi是一個(gè)允許用戶使用Python通過Java JDBC驅(qū)動連接數(shù)據(jù)庫的開源工具。理論上可以兼容所有的JDBC驅(qū)動,目前經(jīng)官方測試通過的數(shù)據(jù)庫有:SQLite、Hypersonic SQL (HSQLDB)、IBM DB2、IBM DB2 for mainframes、Oracle、Teradata DB、Netezza、Mimer DB、Microsoft SQL Server、MySQL、PostgreSQL。
其中沒有Phoenix,但是經(jīng)過測試發(fā)現(xiàn)也可以成功連接并操作Phoenix的。
2.2 安裝
使用pip安裝即可
pip install JayDeBeApi
2.3 使用
-
創(chuàng)建連接
連接函數(shù)是:jaydebeapi.connect(jclassname, url, driver_args=None, jars=None, libs=None),參數(shù)解釋如下
-
jclassname: 是驅(qū)動的類名,這里的類名就是:org.apache.phoenix.jdbc.PhoenixDriver -
url: jdbc的連接url -
driver_args: 驅(qū)動的參數(shù) -
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')
如果出現(xiàn)如下的錯誤,則需要設(shè)置phoenix.schema.isNamespaceMappingEnabled的值設(shè)置為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
具體的設(shè)置方法是在第三個(gè)參數(shù)中添加相應(yīng)的屬性和值, 代碼如下:
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')
-
查詢與其他操作
代碼如下:
## 創(chuàng)建cursor
curs = conn.cursor()
## 執(zhí)行sql
curs.execute('select * from test_table')
## 獲取查詢結(jié)果
result = curs.fetchall()
需要注意的是jaydebeapi執(zhí)行更新操作(如delete、upsert等)時(shí)并不會自動提交,所以執(zhí)行完相關(guān)的操作后需要手動提交,代碼如下:
conn.commit()
3 參考資料
- JayDeBeApi文檔:https://github.com/baztian/jaydebeapi
- phoenixdb文檔:https://python-phoenixdb.readthedocs.io/en/latest/