概述
國產化是當前IT領域的熱點話題之一,人大金倉數據庫KingbaseES V8是當前比較流行的國產化數據庫,KingbaseES已提供了python驅動,本文介紹一下python鏈接KingbaseES V8的方法python
測試環境
CPU:X86_64
OS:CentOS 7
Python 3.6.10
kingbase (Kingbase) V008R003C002B0160
linux
1、下載KingbaseES V8的python驅動
下載地址:https://kingbase.oss-cn-beijing.aliyuncs.com/KES/07-jiekouqudong/Python.rar
下載後獲得一個文件夾
解壓後有5個子文件,其中ksycopg2_linux_amd64_python3.6.tar.gz爲x86_64平臺linux環境驅動包
再次解壓,文件夾ksycopg2內容即爲kingbase的python 3.6驅動
shell
2、把驅動放入python庫搜索路徑
python搜索路徑
當你導入一個模塊,Python 解析器對模塊位置的搜索順序是:
數據庫
一、當前目錄
二、若是不在當前目錄,Python 則搜索在 shell 變量 PYTHONPATH 下的每一個目錄。
三、若是都找不到,Python會察看默認路徑。UNIX下,默認路徑通常爲/usr/local/lib/python/。
模塊搜索路徑存儲在 system 模塊的 sys.path 變量中。變量裏包含當前目錄,PYTHONPATH和由安裝過程決定的默認目錄。
bash
此處咱們設置環境變量PYTHONPATH
vi ~/.bash_profile
把驅動ksycopg2文件夾拷入PYTHONPATH子目錄
Kingbase數據庫的python驅動依賴內部的KCI庫文件,因此還須要把libkci相關庫文件放入LD_LIBRARY_PATH中,libkci相關庫文件在KingbaseES安裝目錄Server/lib子目錄下,把該目錄下libkci相關庫文件複製到指定路徑下(/opt/kdblib),並把/opt/kdblib加入LD_LIBRARY_PATH;
注意:不建議把Server/lib路徑直接加到root的LD_LIBRARY_PATH,有部分庫文件可能會和操做系統庫衝突
測試
3、測試使用python鏈接Kingbase
鏈接數據庫並建表create.py:fetch
#!/usr/bin/python import ksycopg2 conn = ksycopg2.connect(database="TEST", user="SYSTEM", password="111111", host="127.0.0.1", port="54321") cur = conn.cursor() cur.execute("create table test(id integer,name varchar(23))") conn.commit() conn.close()
運行測試程序,登陸數據庫查看,test表已建立成功:
insert操做insert.py:
spa
#!/usr/bin/python import ksycopg2 conn = ksycopg2.connect(database="TEST", user="SYSTEM", password="111111", host="127.0.0.1", port="54321") cur = conn.cursor() cur.execute("insert into test values(%s,%s)",(1,"xiexie1")) cur.execute("insert into test values(%s,%s)",(2,"xiexie2")) cur.execute("insert into test values(%s,%s)",(3,"xiexie3")) cur.execute("insert into test values(%s,%s)",(4,"xiexie4")) conn.commit() conn.close()
運行結果確認:
操作系統
select操做select.py:code
#!/usr/bin/python import ksycopg2 conn = ksycopg2.connect(database="TEST", user="SYSTEM", password="111111", host="127.0.0.1", port="54321") cur = conn.cursor() cur.execute("SELECT * from test") row = cur.fetchone() while row: print("ID = ", row[0]) print("NAME = ", row[1], "\n") row = cur.fetchone() conn.close()
運行結果: