使用Python連接并操作Phoenix

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 使用

  1. 創(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')
  1. 查詢與其他操作
    代碼如下:
## 創(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 參考資料

  1. JayDeBeApi文檔:https://github.com/baztian/jaydebeapi
  2. phoenixdb文檔:https://python-phoenixdb.readthedocs.io/en/latest/
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容