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

Python連接KingbaseES數(shù)據(jù)庫完整指南

 更新時(shí)間:2026年01月14日 08:59:33   作者:rgeshfgreh  
本文詳細(xì)介紹了如何使用psycopg2連接KingbaseES數(shù)據(jù)庫,包括環(huán)境準(zhǔn)備、基本連接、執(zhí)行查詢和數(shù)據(jù)操作、連接池使用、大對象處理以及常見問題排查,感興趣的朋友跟隨小編一起看看吧

這是一份使用 psycopg2 連接 KingbaseES 數(shù)據(jù)庫的完整指南。KingbaseES 與 PostgreSQL 高度兼容,因此 psycopg2(PostgreSQL 的 Python 適配器)是連接它的常用工具。

1. 環(huán)境準(zhǔn)備

  • 安裝 psycopg2: 在命令行中執(zhí)行:
  • pip install psycopg2-binary
  • psycopg2-binary 包含了預(yù)編譯的二進(jìn)制文件,安裝更方便。如果需要從源碼編譯,可以安裝 psycopg2。
  • 確認(rèn) KingbaseES 服務(wù): 確保你的 KingbaseES 數(shù)據(jù)庫服務(wù)已啟動(dòng),并且你擁有目標(biāo)數(shù)據(jù)庫的連接權(quán)限(用戶名、密碼、數(shù)據(jù)庫名、主機(jī)地址、端口號)。

2. 建立基本連接

import psycopg2
# 連接參數(shù)
dbname = "your_database_name"  # 數(shù)據(jù)庫名
user = "your_username"        # 用戶名
password = "your_password"    # 密碼
host = "your_host_address"    # 數(shù)據(jù)庫服務(wù)器地址,如 'localhost' 或 IP
port = "your_port"            # 端口號,默認(rèn)通常是 54321 或 5432 (取決于KingbaseES配置)
try:
    # 建立連接
    connection = psycopg2.connect(
        dbname=dbname,
        user=user,
        password=password,
        host=host,
        port=port
    )
    print("成功連接到 KingbaseES 數(shù)據(jù)庫!")
    # 創(chuàng)建一個(gè)游標(biāo)對象來執(zhí)行 SQL 語句
    cursor = connection.cursor()
    # ... 后續(xù)操作 (查詢、插入等) ...
except (Exception, psycopg2.Error) as error:
    print("連接或操作過程中發(fā)生錯(cuò)誤:", error)
finally:
    # 確保在結(jié)束時(shí)關(guān)閉連接和游標(biāo)
    if connection:
        cursor.close()
        connection.close()
        print("數(shù)據(jù)庫連接已關(guān)閉。")

3. 執(zhí)行查詢 (SELECT)

# 假設(shè)游標(biāo) cursor 已經(jīng)創(chuàng)建
try:
    # 執(zhí)行 SQL 查詢語句
    cursor.execute("SELECT version();")  # 查詢數(shù)據(jù)庫版本信息
    # 獲取結(jié)果
    db_version = cursor.fetchone()  # 獲取單行結(jié)果
    print("KingbaseES 版本信息:", db_version)
    # 查詢多行數(shù)據(jù)示例
    cursor.execute("SELECT id, name FROM your_table WHERE status = %s;", ('active',))
    records = cursor.fetchall()  # 獲取所有結(jié)果行
    print("查詢結(jié)果:")
    for row in records:
        print(f"ID: {row[0]}, Name: {row[1]}")
except (Exception, psycopg2.Error) as error:
    print("查詢執(zhí)行錯(cuò)誤:", error)

注意

  • 使用 cursor.execute(sql_query) 執(zhí)行 SQL 語句。
  • 參數(shù)化查詢使用 %s 作為占位符,并將參數(shù)作為元組傳入 execute() 的第二個(gè)參數(shù)。這能有效防止 SQL 注入攻擊。
  • fetchone() 獲取下一行。
  • fetchall() 獲取所有剩余行。
  • fetchmany(size=n) 獲取指定數(shù)量的行。

4. 執(zhí)行數(shù)據(jù)操作 (INSERT, UPDATE, DELETE)

try:
    # 插入數(shù)據(jù)
    insert_query = """INSERT INTO your_table (id, name, email)
                      VALUES (%s, %s, %s);"""
    record_to_insert = (101, '張三', 'zhangsan@example.com')
    cursor.execute(insert_query, record_to_insert)
    # 更新數(shù)據(jù)
    update_query = """UPDATE your_table SET name = %s WHERE id = %s;"""
    cursor.execute(update_query, ("李四", 101))
    # 刪除數(shù)據(jù)
    delete_query = """DELETE FROM your_table WHERE id = %s;"""
    cursor.execute(delete_query, (102,))
    # 提交事務(wù)!非常重要,否則更改不會(huì)持久化到數(shù)據(jù)庫
    connection.commit()
    print("事務(wù)已提交。")
except (Exception, psycopg2.Error) as error:
    # 如果發(fā)生錯(cuò)誤,回滾事務(wù)
    if connection:
        connection.rollback()
    print("操作執(zhí)行錯(cuò)誤:", error)

關(guān)鍵點(diǎn)

  • 數(shù)據(jù)修改操作(INSERT/UPDATE/DELETE)后,必須調(diào)用 connection.commit() 來提交事務(wù),使更改永久生效。
  • 如果操作過程中出錯(cuò),調(diào)用 connection.rollback() 可以撤銷當(dāng)前事務(wù)中的所有更改。

5. 使用連接池 (可選,推薦用于高并發(fā))

頻繁創(chuàng)建和關(guān)閉數(shù)據(jù)庫連接開銷較大。使用連接池可以提高性能。

from psycopg2 import pool
# 創(chuàng)建連接池 (這里使用簡單的 ThreadedConnectionPool)
min_conn = 1
max_conn = 5
connection_pool = pool.ThreadedConnectionPool(min_conn, max_conn,
                                             dbname=dbname,
                                             user=user,
                                             password=password,
                                             host=host,
                                             port=port)
try:
    # 從連接池獲取一個(gè)連接
    connection = connection_pool.getconn()
    cursor = connection.cursor()
    cursor.execute("SELECT ...")
    # ... 執(zhí)行操作 ...
    connection.commit()
except (Exception, psycopg2.Error) as error:
    print("錯(cuò)誤:", error)
finally:
    # 將連接放回連接池
    if connection:
        cursor.close()
        connection_pool.putconn(connection)

6. 處理大對象 (BLOB/CLOB)

KingbaseES 使用 oidlo 函數(shù)處理大對象。

# 寫入大對象 (例如圖片)
with open('image.jpg', 'rb') as f:
    data = f.read()
    # 創(chuàng)建大對象并獲取其 OID
    cursor.execute("INSERT INTO your_blob_table (file_name) VALUES (%s) RETURNING file_oid;", ('image.jpg',))
    file_oid = cursor.fetchone()[0]
    # 打開大對象進(jìn)行寫入
    lobject = connection.lobject(file_oid, 'wb')  # 'wb' 表示寫入二進(jìn)制模式
    lobject.write(data)
    lobject.close()
    connection.commit()
# 讀取大對象
cursor.execute("SELECT file_oid FROM your_blob_table WHERE file_name = %s;", ('image.jpg',))
file_oid = cursor.fetchone()[0]
lobject = connection.lobject(file_oid, 'rb')  # 'rb' 表示讀取二進(jìn)制模式
data = lobject.read()
lobject.close()
with open('retrieved_image.jpg', 'wb') as f:
    f.write(data)

7. 常見問題排查

  • 連接失敗
    • 檢查 host, port, dbname, user, password 是否正確。
    • 確認(rèn)數(shù)據(jù)庫服務(wù)是否正在運(yùn)行 (netstat -an | grep <port> 或查看服務(wù)狀態(tài))。
    • 檢查防火墻是否允許連接。
    • 查看 KingbaseES 的日志文件(通常位于數(shù)據(jù)庫安裝目錄的 data 子目錄下)獲取錯(cuò)誤詳情。
  • 嘗試使用 sslmode='require' 等參數(shù)(如果需要 SSL)。
  • psycopg2.OperationalError: 通常表示網(wǎng)絡(luò)或連接配置問題。
  • psycopg2.ProgrammingError: 通常表示 SQL 語法錯(cuò)誤或?qū)ο蟛淮嬖凇?/li>
  • 忘記 commit(): 數(shù)據(jù)修改操作后必須提交,否則更改會(huì)丟失。
  • 字符編碼問題: 確保數(shù)據(jù)庫和客戶端的編碼一致(如 UTF-8)。

希望這份指南能幫助你順利使用 Python 和 psycopg2 操作 KingbaseES 數(shù)據(jù)庫!

到此這篇關(guān)于Python連接KingbaseES數(shù)據(jù)庫完整指南的文章就介紹到這了,更多相關(guān)Python連接KingbaseES數(shù)據(jù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pygame庫實(shí)現(xiàn)俄羅斯方塊小游戲

    pygame庫實(shí)現(xiàn)俄羅斯方塊小游戲

    這篇文章主要為大家詳細(xì)介紹了pygame庫實(shí)現(xiàn)俄羅斯方塊小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Python 操作MySQL詳解及實(shí)例

    Python 操作MySQL詳解及實(shí)例

    這篇文章主要介紹了Python 操作MySQL詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • python多進(jìn)程使用apply_async的使用方法詳解

    python多進(jìn)程使用apply_async的使用方法詳解

    這篇文章主要介紹了python多進(jìn)程使用apply_async使用方法詳解,apply_async是異步非阻塞式,不用等待當(dāng)前進(jìn)程執(zhí)行完畢,隨時(shí)跟進(jìn)操作系統(tǒng)調(diào)度來進(jìn)行進(jìn)程切換,即多個(gè)進(jìn)程并行執(zhí)行,提高程序的執(zhí)行效率
    2022-09-09
  • python繪制lost損失曲線加方差范圍的操作方法

    python繪制lost損失曲線加方差范圍的操作方法

    這篇文章主要介紹了python繪制lost損失曲線加方差范圍的操作方法,首先大家需要導(dǎo)入必要的包及數(shù)據(jù)的獲取方法,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-10-10
  • Python中解包操作的性能實(shí)測與最佳實(shí)踐

    Python中解包操作的性能實(shí)測與最佳實(shí)踐

    這篇文章主要為大家詳細(xì)介紹了Python中解包操作的性能實(shí)測與最佳實(shí)踐,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • 利用Seaborn繪制20個(gè)精美的pairplot圖

    利用Seaborn繪制20個(gè)精美的pairplot圖

    本文記錄的使用seaborn繪制pairplot圖,主要是用來顯示兩兩變量之間的關(guān)系(線性或非線性,有無較為明顯的相關(guān)關(guān)系等),感興趣的可以了解一下
    2022-07-07
  • Python Gitlab Api 使用方法

    Python Gitlab Api 使用方法

    今天小編就為大家分享一篇Python Gitlab Api 使用方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • PyCharm:method may be static問題及解決

    PyCharm:method may be static問題及解決

    這篇文章主要介紹了PyCharm:method may be static問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • python處理文本文件并生成指定格式的文件

    python處理文本文件并生成指定格式的文件

    本節(jié)主要介紹了python如何處理文本文件并生成指定格式的文件,需要的朋友可以參考下
    2014-07-07
  • Python 經(jīng)典貪心算法之Prim算法案例詳解

    Python 經(jīng)典貪心算法之Prim算法案例詳解

    這篇文章主要介紹了Python 經(jīng)典貪心算法之Prim算法案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09

最新評論

彭州市| 南川市| 澎湖县| 湖南省| 石林| 山阴县| 临漳县| 吉林市| 沾化县| 六枝特区| 拜城县| 礼泉县| 云阳县| 九龙县| 广水市| 盘锦市| 奉新县| 玉田县| 西畴县| 永年县| 宜川县| 清水河县| 红河县| 涟源市| 齐河县| 武陟县| 乌兰浩特市| 西贡区| 波密县| 泾阳县| 盐亭县| 霍林郭勒市| 安徽省| 达拉特旗| 景宁| 望江县| 留坝县| 阜平县| 郴州市| 民丰县| 富阳市|