最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python連接KingbaseES數(shù)據(jù)庫實(shí)現(xiàn)增刪改查(Ubuntu系統(tǒng))

 更新時(shí)間:2025年09月13日 11:38:21   作者:正在走向自律  
本文介紹了在Ubuntu系統(tǒng)中使用Python連接KingbaseES數(shù)據(jù)庫的方法,主要內(nèi)容包括:安裝與Python版本匹配的ksycopg2驅(qū)動(dòng);配置環(huán)境變量和連接參數(shù);實(shí)現(xiàn)數(shù)據(jù)庫連接、建表及增刪改查操作;封裝一個(gè)可復(fù)用的數(shù)據(jù)庫操作類,通過代碼示例演示了數(shù)據(jù)插入、查詢、更新和刪除等常見操作

1.環(huán)境準(zhǔn)備與驅(qū)動(dòng)安裝

KingbaseES提供了專門的Python驅(qū)動(dòng)包ksycopg2,它是基于PythonDBAPI2.0規(guī)范實(shí)現(xiàn)的線程安全數(shù)據(jù)庫適配器。為了使用ksycopg2連接KingbaseES數(shù)據(jù)庫,需要按照以下步驟進(jìn)行環(huán)境準(zhǔn)備和驅(qū)動(dòng)安裝。

1.1 科普ksycopg2知識(shí)

ksycopg2是Python編程語言的KingbaseES數(shù)據(jù)庫適配器。它的主要特點(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)參考金倉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,下載下來如下圖所示: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)為國產(chǎn)金倉數(shù)據(jù)庫點(diǎn)贊

將這些驅(qū)動(dòng)文件放置在Python的模塊搜索路徑中??梢酝ㄟ^以下Python代碼查看當(dāng)前模塊搜索路徑:

import sys
print(sys.path)

1.3 安裝ksycopg2驅(qū)動(dòng)

1、上面下載后解壓并將ksycopg2文件夾放置在Python的模塊搜索路徑中,如果不清楚自己Python的模塊在哪里,可以寫個(gè)簡單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庫文件路徑添加到LD_LIBRARY_PATH環(huán)境變量中:

export LD_LIBRARY_PATH=/kingbase/data/KESRealPro/V009R002C012/Server/lib:$LD_LIBRARY_PATH

如果不清楚自己KingbaseES的libkci庫文件路在哪里,可以用這個(gè)命令查看:

ps -ef | grep kingbase

5、驗(yàn)證安裝ksycoph2驅(qū)動(dòng)

import ksycopg2
print("ksycopg2驅(qū)動(dòng)安裝成功")

2. 連接KingbaseES數(shù)據(jù)庫

使用ksycopg2連接KingbaseES數(shù)據(jù)庫需要提供數(shù)據(jù)庫名稱、用戶名、密碼、主機(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ù)庫連接成功")
        return conn
    except Exception as e:
        print(f"連接數(shù)據(jù)庫失敗: {e}")
        return None

# 建立數(shù)據(jù)庫連接
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)建一張測試表,有表才好對(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ù)庫查看是否已經(jīng)插入數(shù)據(jù)庫,ubuntu登錄如下所示

# 切換到kingbase用戶
su - kingbase
 
# 連接數(shù)據(jù)庫
ksql -U SYSTEM -d test -p 54321

# 如果上面執(zhí)行不成功,可以指定目錄來連接
/kingbase/data/KESRealPro/V009R002C012/Server/bin/ksql -U SYSTEM -d test -p 54321

執(zhí)行查詢語句,查詢所有用戶數(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ù)庫驗(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ù)庫后臺(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ù)庫"""
        try:
            self.conn = ksycopg2.connect(**self.db_params)
            print("數(shù)據(jù)庫連接成功")
            return True
        except Exception as e:
            print(f"連接數(shù)據(jù)庫失敗: {e}")
            return False
    
    def disconnect(self):
        """斷開數(shù)據(jù)庫連接"""
        if self.conn:
            self.conn.close()
            print("數(shù)據(jù)庫連接已關(guān)閉")
    
    def execute_query(self, sql, params=None):
        """執(zhí)行查詢語句并返回結(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ù)庫管理實(shí)例
    db_manager = KingbaseESManager(
        dbname="TEST",
        user="SYSTEM",
        password="qwe123!@#",
        host="127.0.0.1",
        port="54321"
    )
    
    # 連接數(shù)據(jù)庫
    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ù)庫用戶評(píng)價(jià)

許多用戶在使用KingbaseES數(shù)據(jù)庫時(shí)表現(xiàn)良好,特別是在與傳統(tǒng)數(shù)據(jù)庫如MySQL和PostgreSQL相比時(shí),KingbaseES在性能和擴(kuò)展性方面表現(xiàn)出色。以下是一些用戶評(píng)價(jià):

用戶A:“KingbaseES數(shù)據(jù)庫連接Python庫ksycopg2非常穩(wěn)定,連接速度很快,數(shù)據(jù)庫操作也高效,非常推薦使用!”

用戶B:“在 kingbasees 上運(yùn)行數(shù)據(jù)庫連接后,發(fā)現(xiàn)查詢速度比預(yù)期快得多,適合大規(guī)模數(shù)據(jù)處理的場景。”

用戶C:“ksycopg2驅(qū)動(dòng)安裝過程非常簡單,完全按照教程操作后,就能輕松連接到KingbaseES數(shù)據(jù)庫,非常滿意!”

用戶D:“KingbaseES的Python驅(qū)動(dòng)ksycopg2非常強(qiáng)大,支持多種數(shù)據(jù)庫連接方式,非常靈活。”

6.總結(jié)

本文介紹了在Ubuntu系統(tǒng)中使用Python連接KingbaseES數(shù)據(jù)庫的方法。主要內(nèi)容包括:安裝與Python版本匹配的ksycopg2驅(qū)動(dòng); 配置環(huán)境變量和連接參數(shù); 實(shí)現(xiàn)數(shù)據(jù)庫連接、建表及增刪改查操作; 封裝一個(gè)可復(fù)用的數(shù)據(jù)庫操作類。 通過具體代碼示例演示了數(shù)據(jù)插入、查詢、更新和刪除等常見操作,并提供了驗(yàn)證方法。

通過以上步驟,開發(fā)者可以輕松地在Ubuntu服務(wù)器上使用KingbaseES數(shù)據(jù)庫進(jìn)行數(shù)據(jù)管理和操作。

到此這篇關(guān)于Python連接KingbaseES數(shù)據(jù)庫實(shí)現(xiàn)增刪改查(Ubuntu系統(tǒng))的文章就介紹到這了,更多相關(guān)Python連接KingbaseES數(shù)據(jù)庫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

肃南| 丘北县| 镇安县| 开原市| 石泉县| 朝阳县| 唐山市| 乐陵市| 罗平县| 教育| 浮梁县| 房产| 互助| 昭平县| 兴文县| 深水埗区| 溧水县| 西华县| 富源县| 肇源县| 宁城县| 都兰县| 南木林县| 牟定县| 叙永县| 灵川县| 中牟县| 宣武区| 南江县| 建平县| 泗阳县| 宜黄县| 特克斯县| 饶阳县| 四平市| 阳西县| 清徐县| 东乡县| 巢湖市| 隆化县| 环江|