日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

mysqlclient 連接 OceanBase 數據庫

本文將介紹如何使用 mysqlclient 和 OceanBase 數據庫構建一個應用程序,實現創建表、插入數據和查詢數據等基本操作。

image.png點擊下載 python-mysqlclient 示例工程

前提條件

  • 您已安裝 Python 3.x 和 pip。

  • 您已安裝 OceanBase 數據庫并且創建了 MySQL 模式租戶。

操作步驟

  1. 檢查 Python 和 pip 的版本。

  2. 安裝 mysqlclient 庫。

  3. 獲取 OceanBase 數據庫連接信息。

  4. 修改config.py文件中的數據庫連接信息。

  5. 運行main.py文件。

  6. 在交互式命令行界面進行相應的操作。

步驟一:檢查 Python 和 pip 的版本

打開命令提示符或 PowerShell 終端,運行python --versionpip --version命令,確保 Python 和 pip 正常安裝。

示例如下:

PS C:\Windows\system32> python --version
Python 3.11.2
PS C:\Windows\system32> pip --version
pip 23.3.1 from C:\Users\xxx\AppData\Local\Programs\Python\Python311\Lib\site-packages\pip (python 3.11)

步驟二:安裝 mysqlclient 庫

在安裝 mysqlclient 庫時,需要編譯和鏈接 MySQL C API 來連接 OceanBase 數據庫。因此,需要安裝 MySQL Connector C 或者 MySQL C API 的開發文件,以便在編譯過程中使用。

Windows 環境

方法一:使用預編譯的二進制文件來安裝 mysqlclient 庫

在 Windows 上,您可以使用預編譯的二進制文件來安裝 mysqlclient 庫。從 Download files 下載與您的 Python 版本和操作系統平臺兼容的whl文件,并使用pip install命令來安裝。

示例如下:

打開命令提示符或 PowerShell 終端,運行以下命令,安裝必要的 Python 庫。

  1. 進入到存放whl文件的目錄。

    cd D:\download
  2. 運行以下命令,安裝 mysqlclient 庫。

    PS D:\download> pip install mysqlclient-2.2.0-cp311-cp311-win_amd64.whl
    Processing d:\download\mysqlclient-2.2.0-cp311-cp311-win_amd64.whl
    Installing collected packages: mysqlclient
    Successfully installed mysqlclient-2.2.0

方法二:直接安裝 mysqlclient 庫

  1. 安裝 MySQL。

    在使用 mysqlclient 之前,你需要先安裝 MySQL 數據庫服務器。mysqlclient 庫會依賴于 MySQL 的客戶端程序和庫文件,以便與 MySQL 進行通信。您可以從 MySQL 官方網站下載安裝程序,并按照指示進行安裝。

  2. 安裝 C 編譯器。

    在 Windows 上安裝 C 編譯器,可以選擇安裝 Visual Studio 或者 MinGW。

  3. 安裝開發工具。

    在 Windows上,你可以使用 MySQL Connector/C 來獲取 MySQL 的開發庫。您可以按照以下步驟來進行安裝 MySQL Connector/C:

    1. 打開 MySQL 官網下載 頁面。

    2. 在下載頁面中,選擇適合你的操作系統類型和版本,下載對應的安裝包。

    3. 運行下載的安裝包,按照安裝向導的提示進行安裝。

    4. 在安裝過程中,選擇 Custom 安裝類型,確保安裝了 Development Components

    5. 安裝完成后,重新啟動計算機。

  4. 安裝 mysqlclient 庫。

    打開命令提示符或 PowerShell 終端,運行以下命令,安裝必要的 Python 庫。

    1. 運行以下命令,進入代碼的python-mysqlclient目錄。

      cd python-mysqlclient
    2. 運行以下命令,安裝 mysqlclient 庫。

      pip install -r requirements.txtB
    說明

    您也可以直接運行pip install mysqlclient命令安裝 mysqlclient 庫。

Linux 環境

在 Linux 環境下,Python 的 C 擴展需要依賴 Python.h 頭文件,而這個頭文件通常包含在 python3-devel 包中。如果沒有安裝 python3-devel 包,則編譯 MySQL C API 時會出現找不到 Python.h 的錯誤。

打開命令提示符或 PowerShell 終端,運行以下命令,安裝必要的 Python 庫。

  1. 檢查是否安裝python3-devel

    運行以下命令來檢查是否已安裝python3-devel包:

    rpm -q python3-devel
    • 如果已安裝,則會輸出類似于以下內容的信息:

      python3-devel-3.x.x-x.el7.x86_64

      其中,3.x.x 表示 Python3 的版本號,x86_64 表示系統的 CPU 架構。

    • 如果未安裝,則會輸出類似于以下內容的信息:

      package python3-devel is not installed

      此時可以通過以下命令來安裝python3-devel包:

      sudo yum install python3-devel
      

      安裝完成后,再次運行rpm -q python3-devel命令來確認安裝是否成功。

  2. 安裝 mysqlclient 庫。

    1. 運行以下命令,進入到代碼的python-mysqlclient目錄。

      cd python-mysqlclient
      
    2. 運行以下命令,安裝項目所需的 Python 庫。

      sudo pip install -r requirements.txt
      
    說明

    您也可以直接運行sudo pip install mysqlclient命令安裝 mysqlclient 庫。

步驟三:獲取 OceanBase 數據庫連接信息

聯系 OceanBase 數據庫部署人員或者管理員獲取相應的數據庫連接串。

obclient -h$host -P$port -u$user_name -p$password -D$database_name

參數說明:

  • $hostOceanBase 數據庫連接的域名。

  • $port:OceanBase 數據庫連接端口,MySQL 模式租戶默認是 3306。

  • $database_name:需要訪問的數據庫名稱。

  • $user_name:租戶的連接賬號。

  • $password:提供賬戶密碼。

更多連接串的信息,請參見 獲取連接參數

示例如下:

obclient -hxxx.xxx.xxx.xxx -P3306 -utest_user001 -p****** -Dtest

步驟四:修改 config.py 文件中的數據庫連接信息

根據 步驟三:獲取 OceanBase 數據庫連接信息 中的信息修改文件python-mysqlclient/config.py中的數據庫連接信息。

  1. 進入python-mysqlclient項目文件夾。

  2. 修改config.py文件中的數據庫連接信息。

    • 在 Windows 環境下,使用文本編輯器打開config.py文件,修改文件中的數據庫連接信息,確保與實際情況相符。

    • 在 Linux 環境下,可以使用vi config.py或者vim config.py命令編輯config.py文件,修改文件中的數據庫連接信息,確保與實際情況相符。

    config.py文件中的數據庫連接信息示例如下:

    OCEANBASE_CONFIG = {
     'host': 'xxx.xxx.xxx.xxx',
     'port': 3306,
     'user': 'test_user001',
     'password': '******',
     'database': 'test',
     'charset': 'utf8mb4'
    }

步驟五:運行 main.py 文件

打開命令提示符或 PowerShell 終端,運行python main.py命令啟動程序。

  1. 進入到python-mysqlclient項目目錄下。

    示例如下:

    cd /home/admin/python-mysqlclient
  2. 運行以下命令啟動main.py程序。

    python main.py

    返回結果如下:

    Table created successfully
    Instruction: 1.Insert Data; 2.Query Data; 3.Exit.
    Enter the command [1/2/3]>

步驟六:在交互式命令行界面進行相應的操作

  • 插入數據成功示例。

    1. 在交互式命令行界面,輸入指令1,按回車鍵。

      示例如下:

      Enter the command [1/2/3]> 1
    2. 在提示Enter name:后,輸入姓名,按回車鍵。

      示例如下:

      Enter name:A1
    3. 在提示Enter age:后,輸入年齡,按回車鍵。

      示例如下:

      Enter age:18
    4. 返回插入數據成功,顯示Record inserted successfully。最后,顯示指令說明,提示用戶可以輸入123,按回車鍵執行相應操作。

      示例如下:

      Record inserted successfully
      Instruction: 1.Insert Data; 2.Query Data; 3.Exit.
      Enter the command [1/2/3]>
  • 插入數據失敗示例。

    1. 在交互式命令行界面,輸入指令1,按回車鍵。

      示例如下:

      Enter the command [1/2/3]> 1
    2. 在提示Enter name:后,輸入姓名,按回車鍵。

      示例如下:

      Enter name:A2
    3. 在提示Enter age:后,輸入年齡,按回車鍵。

      說明

      字段年齡的數據類型是整型。

      示例如下:

      Enter age:十八
    4. 返回插入數據錯誤信息,顯示(1366, 'Incorrect integer value')。最后,顯示指令說明,提示用戶可以輸入123,按回車鍵執行相應操作。

      示例如下:

      (1366, 'Incorrect integer value')
      Instruction: 1.Insert Data; 2.Query Data; 3.Exit.
      Enter the command [1/2/3]>
  • 查詢數據示例。

    1. 在交互式命令行界面,輸入指令2,按回車鍵。

      示例如下:

      Enter the command [1/2/3]> 2
    2. 顯示表的數據。最后,顯示指令說明,提示用戶可以輸入123,按回車鍵執行相應操作。

      示例如下:

      (1, 'A1', 18)
      Instruction: 1.Insert Data; 2.Query Data; 3.Exit.
      Enter the command [1/2/3]>
  • 輸入錯誤指令示例。

    1. 在交互式命令行界面,輸入一個不是1/2/3的,按回車鍵。

      示例如下:

      Enter the command [1/2/3]> A
    2. 返回錯誤信息,顯示Invalid command, please enter command again [1/2/3]。最后,顯示指令說明,提示用戶可以輸入123,按回車鍵執行相應操作。

      示例如下:

      Invalid command, please enter command again [1/2/3]
      Instruction: 1.Insert Data; 2.Query Data; 3.Exit.
      Enter the command [1/2/3]>
  • 退出程序示例。

    在交互式命令行界面,輸入指令3,按回車鍵退出程序。

    示例如下:

    Enter the command [1/2/3]> 3

項目代碼介紹

點擊 python-mysqlclient 下載項目代碼,是一個名稱為python-mysqlclient.zip的壓縮包。

解壓后,得到一個名為python-mysqlclient的文件夾。目錄結構如下所示:

python-mysqlclient
├── config.py
├── db.py
├── main.py
└── requirements.txt

文件說明:

  • config.py:用于管理數據庫連接配置信息。

  • db.py:用于操作數據庫,包括創建表、插入數據、查詢數據等。

  • main.py:應用程序的入口,包含了簡單的用戶交互界面,用戶可以通過輸入命令來執行相應的操作。

  • requirements.txt:列出了項目所需的 Python 庫。

    說明

    本文獲取的代碼中只列出了 mysqlclient 庫的版本要求,可以通過pip install -r requirements.txt命令安裝,執行以上命令后,會自動安裝所需的庫。

config.py 代碼介紹

使用 Python 連接數據庫時需要指定數據庫連接參數,可以將這些參數放在一個單獨的配置文件中,比如config.py文件。將這些參數封裝在一個字典中,可以避免在每個文件中都重復寫入這些參數的麻煩,直接在其他 Python 文件中引用該字典來連接數據庫即可。

本文獲取的config.py文件中的代碼定義了一個名為OCEANBASE_CONFIG的字典變量,用于管理 OceanBase 數據庫連接參數。

代碼如下:

OCEANBASE_CONFIG = {
    'host': 'localhost',
    'port': port,
    'user': 'user_name',
    'password': '',
    'database': 'db_name',
    'charset': 'utf8mb4'
}

參數解釋:

  • hostOceanBase 數據庫連接的域名。

  • port:提供 OceanBase 數據庫連接端口,默認端口是 3306。

  • user提供租戶的連接賬戶。

  • password提供賬戶密碼。

  • database:需要連接的數據庫名。

  • charset:連接數據庫時使用的字符集。

重要

具體的屬性(參數)配置取決于項目需求和數據庫的特點,建議您根據實際情況進行調整和配置。

db.py 代碼介紹

db.py文件是一個 Python 語言編寫的封裝數據庫操作的模塊,主要用于實現數據庫的增刪改查操作。

該文件中主要包括以下幾個部分:

  1. 導入 MySQLdb 模塊和導入數據庫連接參數。

    代碼如下:

    import MySQLdb
    from config import OCEANBASE_CONFIG
  2. 定義創建表的函數。

    定義函數create_table,該函數的作用是在 OceanBase 數據庫中創建名為test_tbl1的表。使用with語句管理數據庫連接和游標對象的生命周期,保證了數據庫連接和游標對象的安全關閉,避免了內存泄漏等問題。定義 SQL 語句,執行 SQL 語句,打印輸出執行結果或異常信息。

    代碼如下:

    def create_table():
     with MySQLdb.connect(**OCEANBASE_CONFIG) as conn:
     with conn.cursor() as cursor:
     try:
     create_table_sql = """
     CREATE TABLE test_tbl1 (
     id INT UNSIGNED NOT NULL AUTO_INCREMENT,
     name VARCHAR(50) NOT NULL,
     age INT UNSIGNED NOT NULL,
     PRIMARY KEY (id)
     ) ENGINE=OCEANBASE AUTO_INCREMENT=1
     """
     cursor.execute(create_table_sql)
    
     print("Table created successfully")
     except MySQLdb.Error as err:
     print(err)
  3. 定義插入數據的函數。

    定義函數insert_record,該函數主要實現了向指定表中插入一條記錄,記錄包含nameage兩個字段。使用with語句管理數據庫連接和游標對象的生命周期,保證了數據庫連接和游標對象的安全關閉,避免了內存泄漏等問題。定義 SQL 語句,執行插入操作,提交事務,打印輸出執行結果或異常信息。

    代碼如下:

    def insert_record(table_name, name, age):
     with MySQLdb.connect(**OCEANBASE_CONFIG) as conn:
     with conn.cursor() as cursor:
     try:
     insert_sql = f"INSERT INTO {table_name} (name, age) VALUES (%s, %s)"
     cursor.execute(insert_sql, (name, age))
     conn.commit()
    
     print("Record inserted successfully")
     except MySQLdb.Error as err:
     print(err)
    
  4. 定義查詢表數據的函數。

    定義函數select_all,該函數主要實現了查詢指定表中的所有記錄的功能。使用with語句管理數據庫連接和游標對象的生命周期,保證了數據庫連接和游標對象的安全關閉,避免了內存泄漏等問題。定義 SQL 語句,執行查詢操作并遍歷查詢結果,打印輸出所有記錄。如果發生異常,則捕捉異常并打印輸出異常信息。

    代碼如下:

    def select_all(table_name):
     with MySQLdb.connect(**OCEANBASE_CONFIG) as conn:
     with conn.cursor() as cursor:
     try:
     select_sql = f"SELECT * FROM {table_name}"
     cursor.execute(select_sql)
     result = cursor.fetchall()
     for row in result:
     print(row)
    
     except MySQLdb.Error as err:
     print(err)

main.py 代碼介紹

本文中main.py的主要作用是演示了如何使用 Python 和 MySQLdb 模塊來操作數據庫,并通過交互式命令行界面讓您進行相應的操作。您可以通過該程序來創建表、插入記錄和查詢所有記錄,從而實現了基本的數據庫操作。

該文件中主要包括以下幾個部分:

  1. 導入db.py文件中定義的函數。

    從 db 模塊中導入create_tableinsert_recordselect_all這三個函數。

    代碼如下:

    from db import create_table, insert_record, select_all
    
  2. 定義一個函數,用于操作數據庫。

    定義函數main,該函數實現了一個簡單的命令行交互式程序,用于操作數據庫。它首先調用create_table函數創建名為test_tbl1的表,然后進入一個while循環,等待用戶輸入命令。根據用戶的選擇,程序調用不同的函數進行插入或查詢操作,直到用戶輸入3命令退出程序。如果用戶輸入的是無效命令,則程序會提示用戶重新輸入。

    根據輸入的不同命令,程序執行不同的操作,包括插入數據(1)、查詢數據(2)和退出程序(3)。

    代碼如下:

    def main():
     create_table()
     while True:
     print("Instruction: 1.Insert Data; 2.Query Data; 3.Exit.")
    
     command = input("Enter the command [1/2/3]> ")
     if command == "1":
     name = input("Enter name:")
     age = input("Enter age:")
     insert_record("test_tbl1", name, age)
     elif command == "2":
     select_all("test_tbl1")
     elif command == "3":
     break
     else:
     print("Invalid command, please enter command again [1/2/3]")
  3. 設置main函數的使用場景。

    設置只有當main.py被直接運行時,才會調用main函數執行程序的主要邏輯。而如果該程序被導入到其他模塊中,則不會執行main函數。

    代碼如下:

    if __name__ == "__main__":
     main()
    說明

    這種寫法可以避免在導入該模塊時自動執行main函數,從而保證程序的可重用性和可擴展性。

完整的代碼展示

config.py

OCEANBASE_CONFIG = {
    'host': 'localhost',
    'port': port,
    'user': 'user_name',
    'password': '',
    'database': 'db_name',
    'charset': 'utf8mb4'
}

db.py

import MySQLdb
from config import OCEANBASE_CONFIG


def create_table():
    with MySQLdb.connect(**OCEANBASE_CONFIG) as conn:
        with conn.cursor() as cursor:
            try:
                create_table_sql = """
                    CREATE TABLE test_tbl1 (
                        id INT UNSIGNED NOT NULL AUTO_INCREMENT,
                        name VARCHAR(50) NOT NULL,
                        age INT UNSIGNED NOT NULL,
                        PRIMARY KEY (id)
                    ) ENGINE=OCEANBASE AUTO_INCREMENT=1
                """
                cursor.execute(create_table_sql)

                print("Table created successfully")
            except MySQLdb.Error as err:
                print(err)


def insert_record(table_name, name, age):
    with MySQLdb.connect(**OCEANBASE_CONFIG) as conn:
        with conn.cursor() as cursor:
            try:
                insert_sql = f"INSERT INTO {table_name} (name, age) VALUES (%s, %s)"
                cursor.execute(insert_sql, (name, age))
                conn.commit()

                print("Record inserted successfully")
            except MySQLdb.Error as err:
                print(err)


def select_all(table_name):
    with MySQLdb.connect(**OCEANBASE_CONFIG) as conn:
        with conn.cursor() as cursor:
            try:
                select_sql = f"SELECT * FROM {table_name}"
                cursor.execute(select_sql)
                result = cursor.fetchall()
                for row in result:
                    print(row)

            except MySQLdb.Error as err:
                print(err)

main.py

from db import create_table, insert_record, select_all

def main():
    create_table()
    while True:
        print("Instruction: 1.Insert Data; 2.Query Data; 3.Exit.")

        command = input("Enter the command [1/2/3]> ")
        if command == "1":
            name = input("Enter name:")
            age = input("Enter age:")
            insert_record("test_tbl1", name, age)
        elif command == "2":
            select_all("test_tbl1")
        elif command == "3":
            break
        else:
            print("Invalid command, please enter command again [1/2/3]")

if __name__ == "__main__":
    main()

相關文檔