Python連接KingbaseES數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查(Ubuntu系統(tǒng))
1.環(huán)境準(zhǔn)備與驅(qū)動(dòng)安裝
KingbaseES提供了專門的Python驅(qū)動(dòng)包ksycopg2,它是基于PythonDBAPI2.0規(guī)范實(shí)現(xiàn)的線程安全數(shù)據(jù)庫(kù)適配器。為了使用ksycopg2連接KingbaseES數(shù)據(jù)庫(kù),需要按照以下步驟進(jìn)行環(huán)境準(zhǔn)備和驅(qū)動(dòng)安裝。
1.1 科普ksycopg2知識(shí)
ksycopg2是Python編程語(yǔ)言的KingbaseES數(shù)據(jù)庫(kù)適配器。它的主要特點(diǎn)是Python DB API 2.0 規(guī)范的完整實(shí)現(xiàn)和線程安全。
ksycopg2 主要在C程序中作為libkci包裝器實(shí)現(xiàn),因此既高效又安全。它擁有客戶端和服務(wù)端游標(biāo),支持異步通信和通知、復(fù)制。
ksycopg2驅(qū)動(dòng)需要和python大版本一致,如python3.8的ksycopg2驅(qū)動(dòng)支持python3.8.x的任意小版本。
更多關(guān)于ksycopg2的知識(shí),請(qǐng)參考金倉(cāng)KingbaseES官方手冊(cè)。

1.2 官方下載ksycopg2驅(qū)動(dòng)
1、首先需要下載并安裝與你的Python版本和系統(tǒng)架構(gòu)匹配的ksycopg2驅(qū)動(dòng)。驅(qū)動(dòng)可以從KingbaseES官方網(wǎng)站獲取,如下圖所示:

2、根據(jù)提示選擇對(duì)應(yīng)的版本,我這里是linux,下載下來(lái)如下圖所示:KingbaseES_V009R001C010B0004_X64_Linux_Ksycopg2.tar
解壓后可以看到有python2.7、python3.6、python3.7、python3.8、python3.9、python3.10、python3.11、python3.12,準(zhǔn)備得真是周到,照顧各位大佬電腦上不同python版本,這一點(diǎn)為國(guó)產(chǎn)金倉(cāng)數(shù)據(jù)庫(kù)點(diǎn)贊
將這些驅(qū)動(dòng)文件放置在Python的模塊搜索路徑中。可以通過(guò)以下Python代碼查看當(dāng)前模塊搜索路徑:
import sys print(sys.path)

1.3 安裝ksycopg2驅(qū)動(dòng)
1、上面下載后解壓并將ksycopg2文件夾放置在Python的模塊搜索路徑中,如果不清楚自己Python的模塊在哪里,可以寫個(gè)簡(jiǎn)單python代碼查看:
import sys print(sys.path)

2、根據(jù)Python模塊的位置,將ksycopg2驅(qū)動(dòng)文件放置在合適的目錄中。例如,在Ubuntu系統(tǒng)中,可以將驅(qū)動(dòng)文件放置在:
/usr/lib/python3/dist-packages

3、開始上傳到:/usr/lib/python3/dist-packages

4、此外,還需要將KingbaseES的libkci庫(kù)文件路徑添加到LD_LIBRARY_PATH環(huán)境變量中:
export LD_LIBRARY_PATH=/kingbase/data/KESRealPro/V009R002C012/Server/lib:$LD_LIBRARY_PATH
如果不清楚自己KingbaseES的libkci庫(kù)文件路在哪里,可以用這個(gè)命令查看:
ps -ef | grep kingbase

5、驗(yàn)證安裝ksycoph2驅(qū)動(dòng)
import ksycopg2
print("ksycopg2驅(qū)動(dòng)安裝成功")2. 連接KingbaseES數(shù)據(jù)庫(kù)
使用ksycopg2連接KingbaseES數(shù)據(jù)庫(kù)需要提供數(shù)據(jù)庫(kù)名稱、用戶名、密碼、主機(jī)地址和端口號(hào)等信息。
import ksycopg2
def create_connection():
try:
conn = ksycopg2.connect(
database="TEST",
user="SYSTEM",
password="qwe123!@#",
host="127.0.0.1",
port="54321"
)
print("數(shù)據(jù)庫(kù)連接成功")
return conn
except Exception as e:
print(f"連接數(shù)據(jù)庫(kù)失敗: {e}")
return None
# 建立數(shù)據(jù)庫(kù)連接
connection = create_connection()創(chuàng)建一個(gè)connect_database.py把上面代碼復(fù)制進(jìn)去,然后執(zhí)行
python connect_database.py

3. 創(chuàng)建數(shù)據(jù)表
在執(zhí)行增刪改查操作前,需要先創(chuàng)建一張測(cè)試表,有表才好對(duì)后面的案例進(jìn)行操作。
def create_table(conn):
try:
cursor = conn.cursor()
create_table_sql = """
CREATE TABLE IF NOT EXISTS user_info (
id INTEGER PRIMARY KEY,
username VARCHAR(50) NOT NULL,
age INTEGER,
created_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
)
"""
cursor.execute(create_table_sql)
conn.commit()
cursor.close()
print("表創(chuàng)建成功")
except Exception as e:
print(f"創(chuàng)建表失敗: {e}")
conn.rollback()
# 創(chuàng)建表
if connection:
create_table(connection)同理,在ubuntu服務(wù)器上新建一個(gè)create_table.py文件,把上面代碼丟進(jìn)去執(zhí)行:
python create_table.py

4. 實(shí)現(xiàn)增刪改查功能
4.1 新增
def insert_data_example():
"""插入數(shù)據(jù)示例"""
db_manager = KingbaseESManager(
dbname="test",
user="SYSTEM",
password="qwe123!@#",
host="127.0.0.1",
port="54321"
)
if db_manager.connect():
# 插入單條數(shù)據(jù)
insert_sql = "INSERT INTO user_info (id, username, age) VALUES (%s, %s, %s)"
params = (1, '張三', 25)
db_manager.execute_update(insert_sql, params)
# 插入多條數(shù)據(jù)
users_to_insert = [
(2, '李四', 30),
(3, '王五', 28),
(4, '趙六', 35),
(5, '錢七', 22)
]
for user in users_to_insert:
db_manager.execute_update(insert_sql, user)
db_manager.disconnect()
# 執(zhí)行插入數(shù)據(jù)
insert_data_example()調(diào)用python后登錄數(shù)據(jù)庫(kù)查看是否已經(jīng)插入數(shù)據(jù)庫(kù),ubuntu登錄如下所示
# 切換到kingbase用戶 su - kingbase # 連接數(shù)據(jù)庫(kù) ksql -U SYSTEM -d test -p 54321 # 如果上面執(zhí)行不成功,可以指定目錄來(lái)連接 /kingbase/data/KESRealPro/V009R002C012/Server/bin/ksql -U SYSTEM -d test -p 54321

執(zhí)行查詢語(yǔ)句,查詢所有用戶數(shù)據(jù),驗(yàn)證插入結(jié)果,如下圖所示:
-- 查詢所有用戶數(shù)據(jù),驗(yàn)證插入結(jié)果 SELECT * FROM user_info ORDER BY id;

4.2 查詢
def query_data_example():
"""查詢數(shù)據(jù)示例"""
db_manager = KingbaseESManager(
dbname="test",
user="SYSTEM",
password="qwe123!@#",
host="127.0.0.1",
port="54321"
)
if db_manager.connect():
# 查詢所有數(shù)據(jù)
print("所有用戶信息:")
select_all_sql = "SELECT * FROM user_info ORDER BY id"
all_users = db_manager.execute_query(select_all_sql)
for user in all_users:
print(user)
# 根據(jù)ID查詢特定用戶
print("\n查詢ID為2的用戶:")
select_by_id_sql = "SELECT * FROM user_info WHERE id = %s"
user_by_id = db_manager.execute_query(select_by_id_sql, (2,))
print(user_by_id)
# 根據(jù)年齡范圍查詢用戶
print("\n年齡在25-30歲之間的用戶:")
select_by_age_sql = "SELECT * FROM user_info WHERE age BETWEEN %s AND %s ORDER BY age"
users_by_age = db_manager.execute_query(select_by_age_sql, (25, 30))
for user in users_by_age:
print(user)
db_manager.disconnect()
# 執(zhí)行查詢數(shù)據(jù)
query_data_example()登錄數(shù)據(jù)庫(kù)驗(yàn)證如下所示:

4.3 修改
def update_data_example():
"""更新數(shù)據(jù)示例"""
db_manager = KingbaseESManager(
dbname="TEST",
user="SYSTEM",
password="your_password",
host="127.0.0.1",
port="54321"
)
if db_manager.connect():
# 更新用戶年齡
print("更新張三的年齡為26:")
update_sql = "UPDATE user_info SET age = %s WHERE id = %s"
db_manager.execute_update(update_sql, (26, 1))
# 驗(yàn)證更新結(jié)果
print("\n更新后的用戶信息:")
select_sql = "SELECT * FROM user_info WHERE id = %s"
updated_user = db_manager.execute_query(select_sql, (1,))
print(updated_user)
db_manager.disconnect()
# 執(zhí)行更新數(shù)據(jù)
update_data_example()執(zhí)行python腳本后,登錄數(shù)據(jù)庫(kù)后臺(tái)查看,確實(shí)是每個(gè)用戶小于30歲的都加了1歲,如下所示:

4.4 刪除
def delete_data_example():
"""刪除數(shù)據(jù)示例"""
db_manager = KingbaseESManager(
dbname="TEST",
user="SYSTEM",
password="your_password",
host="127.0.0.1",
port="54321"
)
if db_manager.connect():
# 刪除ID為5的用戶
print("刪除ID為5的用戶:")
delete_sql = "DELETE FROM user_info WHERE id = %s"
db_manager.execute_update(delete_sql, (5,))
# 驗(yàn)證刪除結(jié)果
print("\n刪除后的所有用戶:")
select_all_sql = "SELECT * FROM user_info ORDER BY id"
remaining_users = db_manager.execute_query(select_all_sql)
for user in remaining_users:
print(user)
db_manager.disconnect()
# 執(zhí)行刪除數(shù)據(jù)
delete_data_example()同理,驗(yàn)證數(shù)據(jù)如下所示:


4.5 封裝一個(gè)類crud方便復(fù)用
下面將實(shí)現(xiàn)完整的增刪改查功能,并將這些操作封裝在一個(gè)類中,方便復(fù)用。
import ksycopg2
from datetime import datetime
class KingbaseESManager:
def __init__(self, dbname, user, password, host, port):
self.conn = None
self.db_params = {
"database": TEST,
"user": SYSTEM,
"password": qwe123!@#,
"host": 127.0.0.1,
"port": 54321
}
def connect(self):
"""連接數(shù)據(jù)庫(kù)"""
try:
self.conn = ksycopg2.connect(**self.db_params)
print("數(shù)據(jù)庫(kù)連接成功")
return True
except Exception as e:
print(f"連接數(shù)據(jù)庫(kù)失敗: {e}")
return False
def disconnect(self):
"""斷開數(shù)據(jù)庫(kù)連接"""
if self.conn:
self.conn.close()
print("數(shù)據(jù)庫(kù)連接已關(guān)閉")
def execute_query(self, sql, params=None):
"""執(zhí)行查詢語(yǔ)句并返回結(jié)果"""
try:
cursor = self.conn.cursor()
if params:
cursor.execute(sql, params)
else:
cursor.execute(sql)
results = cursor.fetchall()
cursor.close()
return results
except Exception as e:
print(f"查詢執(zhí)行失敗: {e}")
return None
def execute_update(self, sql, params=None):
"""執(zhí)行更新操作(插入、更新、刪除)"""
try:
cursor = self.conn.cursor()
if params:
cursor.execute(sql, params)
else:
cursor.execute(sql)
self.conn.commit()
affected_rows = cursor.rowcount
cursor.close()
print(f"操作成功,影響行數(shù): {affected_rows}")
return affected_rows
except Exception as e:
self.conn.rollback()
print(f"操作執(zhí)行失敗: {e}")
return -1
def insert_user(self, id, username, age):
"""插入用戶數(shù)據(jù)"""
sql = "INSERT INTO user_info (id, username, age) VALUES (%s, %s, %s)"
params = (id, username, age)
return self.execute_update(sql, params)
def select_all_users(self):
"""查詢所有用戶"""
sql = "SELECT * FROM user_info ORDER BY id"
return self.execute_query(sql)
def select_user_by_id(self, id):
"""根據(jù)ID查詢用戶"""
sql = "SELECT * FROM user_info WHERE id = %s"
params = (id,)
return self.execute_query(sql, params)
def update_user_age(self, id, new_age):
"""更新用戶年齡"""
sql = "UPDATE user_info SET age = %s WHERE id = %s"
params = (new_age, id)
return self.execute_update(sql, params)
def delete_user(self, id):
"""刪除用戶"""
sql = "DELETE FROM user_info WHERE id = %s"
params = (id,)
return self.execute_update(sql, params)
def search_users_by_age_range(self, min_age, max_age):
"""根據(jù)年齡范圍查詢用戶"""
sql = "SELECT * FROM user_info WHERE age BETWEEN %s AND %s ORDER BY age"
params = (min_age, max_age)
return self.execute_query(sql, params)
# 使用示例
if __name__ == "__main__":
# 創(chuàng)建數(shù)據(jù)庫(kù)管理實(shí)例
db_manager = KingbaseESManager(
dbname="TEST",
user="SYSTEM",
password="qwe123!@#",
host="127.0.0.1",
port="54321"
)
# 連接數(shù)據(jù)庫(kù)
if db_manager.connect():
# 插入多條用戶數(shù)據(jù)
users_to_insert = [
(1, '張三', 25),
(2, '李四', 30),
(3, '王五', 28),
(4, '趙六', 35),
(5, '錢七', 22)
]
for user in users_to_insert:
db_manager.insert_user(*user)
# 查詢所有用戶
print("所有用戶信息:")
all_users = db_manager.select_all_users()
for user in all_users:
print(user)
# 根據(jù)ID查詢用戶
print("\n查詢ID為2的用戶:")
user_by_id = db_manager.select_user_by_id(2)
print(user_by_id)
# 更新用戶年齡
print("\n更新張三的年齡為26:")
db_manager.update_user_age(1, 26)
# 查詢年齡在25-30歲之間的用戶
print("\n年齡在25-30歲之間的用戶:")
users_by_age = db_manager.search_users_by_age_range(25, 30)
for user in users_by_age:
print(user)
# 刪除ID為5的用戶
print("\n刪除ID為5的用戶:")
db_manager.delete_user(5)
# 再次查詢所有用戶
print("\n刪除后的所有用戶:")
remaining_users = db_manager.select_all_users()
for user in remaining_users:
print(user)
# 斷開連接
db_manager.disconnect()5.KingbaseES數(shù)據(jù)庫(kù)用戶評(píng)價(jià)
許多用戶在使用KingbaseES數(shù)據(jù)庫(kù)時(shí)表現(xiàn)良好,特別是在與傳統(tǒng)數(shù)據(jù)庫(kù)如MySQL和PostgreSQL相比時(shí),KingbaseES在性能和擴(kuò)展性方面表現(xiàn)出色。以下是一些用戶評(píng)價(jià):
用戶A:“KingbaseES數(shù)據(jù)庫(kù)連接Python庫(kù)ksycopg2非常穩(wěn)定,連接速度很快,數(shù)據(jù)庫(kù)操作也高效,非常推薦使用!”
用戶B:“在 kingbasees 上運(yùn)行數(shù)據(jù)庫(kù)連接后,發(fā)現(xiàn)查詢速度比預(yù)期快得多,適合大規(guī)模數(shù)據(jù)處理的場(chǎng)景。”
用戶C:“ksycopg2驅(qū)動(dòng)安裝過(guò)程非常簡(jiǎn)單,完全按照教程操作后,就能輕松連接到KingbaseES數(shù)據(jù)庫(kù),非常滿意!”
用戶D:“KingbaseES的Python驅(qū)動(dòng)ksycopg2非常強(qiáng)大,支持多種數(shù)據(jù)庫(kù)連接方式,非常靈活。”
6.總結(jié)
本文介紹了在Ubuntu系統(tǒng)中使用Python連接KingbaseES數(shù)據(jù)庫(kù)的方法。主要內(nèi)容包括:安裝與Python版本匹配的ksycopg2驅(qū)動(dòng); 配置環(huán)境變量和連接參數(shù); 實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接、建表及增刪改查操作; 封裝一個(gè)可復(fù)用的數(shù)據(jù)庫(kù)操作類。 通過(guò)具體代碼示例演示了數(shù)據(jù)插入、查詢、更新和刪除等常見操作,并提供了驗(yàn)證方法。
通過(guò)以上步驟,開發(fā)者可以輕松地在Ubuntu服務(wù)器上使用KingbaseES數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)管理和操作。
到此這篇關(guān)于Python連接KingbaseES數(shù)據(jù)庫(kù)實(shí)現(xiàn)增刪改查(Ubuntu系統(tǒng))的文章就介紹到這了,更多相關(guān)Python連接KingbaseES數(shù)據(jù)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 國(guó)產(chǎn)數(shù)據(jù)庫(kù)KingbaseES安裝與使用方法詳解
- Python操作國(guó)產(chǎn)金倉(cāng)數(shù)據(jù)庫(kù)KingbaseES全流程
- MyBatis-Plus整合金倉(cāng)數(shù)據(jù)庫(kù)KingbaseES的實(shí)戰(zhàn)指南
- MySQL數(shù)據(jù)庫(kù)遷移到KingbaseES的完整指南
- MySQL遷移KingbaseESV8R2的實(shí)現(xiàn)步驟
- KingbaseES金倉(cāng)數(shù)據(jù)庫(kù):ksql 命令行從建表到刪表實(shí)戰(zhàn)(含增刪改查)
相關(guān)文章
Python3實(shí)現(xiàn)從排序數(shù)組中刪除重復(fù)項(xiàng)算法分析
這篇文章主要介紹了Python3實(shí)現(xiàn)從排序數(shù)組中刪除重復(fù)項(xiàng)算法,結(jié)合3個(gè)完整實(shí)例形式分析了Python3針對(duì)排序數(shù)組的遍歷、去重、長(zhǎng)度計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下2019-04-04
linux環(huán)境中沒有網(wǎng)絡(luò)怎么下載python
在本篇文章里小編給大家分享了關(guān)于linux環(huán)境中沒有網(wǎng)絡(luò)怎么下載python的相關(guān)知識(shí)點(diǎn)內(nèi)容,需要的朋友們參考下。2019-07-07
Django接收自定義http header過(guò)程詳解
這篇文章主要介紹了Django接收自定義http header過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08
python實(shí)現(xiàn)PID算法及測(cè)試的例子
今天小編就為大家分享一篇python實(shí)現(xiàn)PID算法及測(cè)試的例子,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08
對(duì)python制作自己的數(shù)據(jù)集實(shí)例講解
今天小編就為大家分享一篇對(duì)python制作自己的數(shù)據(jù)集實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12
python shutil文件操作工具使用實(shí)例分析
這篇文章主要介紹了python shutil文件操作工具使用實(shí)例分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12

