全部產品
Search
文件中心

Lindorm:基於Python的應用開發(mysql-connector-python)

更新時間:Oct 25, 2024

mysql-connector-python是MySQL官方提供的Python連接器,不依賴C語言標準函數庫,使用更便捷。本文介紹如何在Python中通過mysql-connector-python串連Lindorm寬表引擎。

前提條件

  • 已安裝Python環境,且Python版本為3.8及以上版本。

  • 已開通MySQL協議相容功能。如何開通,請參見開通MySQL協議相容功能

  • 已將用戶端IP添加至白名單,具體操作請參見設定白名單

操作步驟

  1. 安裝8.0.11版本的mysql-connector-python。您也可以通過pip install mysql-connector-python==8.0.11語句直接通過pip進行安裝。

  2. 建立串連並配置串連參數。

    connection = mysql.connector.connect(host='<MySQL相容地址>', port=33060, user='<使用者名稱>', passwd='<密碼>', database='<資料庫名>')
    cursor = connection.cursor(prepared=True)
    

    參數說明

    參數

    說明

    host

    Lindorm寬表引擎的MySQL相容地址,需去掉末尾的冒號及連接埠號碼:33060。如何擷取,請參見查看串連地址

    重要

    如果應用部署在ECS,且ECS與Lindorm執行個體部署在同一專用網路,建議您通過專用網路訪問Lindorm執行個體,否則請使用公網訪問。通過公網串連Lindorm前需在控制台開通公網地址,開通方式請參見開通步驟

    port

    Lindorm寬表引擎MySQL協議的連接埠,固定為33060

    user

    如果您忘記使用者密碼,可以通過Lindorm寬表引擎的叢集管理系統修改密碼。具體操作,請參見修改使用者密碼

    passwd

    database

    需要串連的資料庫名稱。預設串連default資料庫。

  3. 通過寬表SQL文法使用Lindorm寬表引擎。以建立表為例。

    sql_create_table = ("create table if not exists test_python(c1 integer, c2 integer, c3 varchar, primary key(c1))")
    print(sql_create_table)
    cursor.execute(sql_create_table)
    

完整樣本

完整範例程式碼如下:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import json

import mysql.connector

# 開啟資料庫連接。
# host是Lindorm寬表引擎MySQL協議的串連地址。
# port是Lindorm寬表引擎MySQL協議的連接埠,一般為33060。
# user是Lindorm寬表引擎的使用者帳號。
# passwd是Lindorm寬表引擎的使用者帳號對應的密碼。
# database是Lindorm寬表引擎中的資料庫名。


connection = mysql.connector.connect(host='ld-bp1hn6yq0yb34****-proxy-sql-lindorm-public.lindorm.rds.aliyuncs.com', port=33060,user='root', passwd='test',database='default')

# 建立cursor,注意prepared=True
cursor = connection.cursor(prepared=True)

# 建立表
sql_create_table = ("create table if not exists test_python(c1 integer, c2 integer, c3 varchar, primary key(c1))")
print(sql_create_table)
cursor.execute(sql_create_table)

# 插入資料
sql_upsert = "upsert into test_python(c1, c2, c3) values(?, ?, ?)"
print(sql_upsert)

# 執行單條插入語句
cursor.execute(sql_upsert, (1, 1, '1'))
cursor.execute(sql_upsert, (2, 2, json.dumps({"key": "value2"})))

# 執行多條插入語句
data = [
    (3, 3, '3'),
    (4, 4, json.dumps({"key": "value4"})),
]
cursor.executemany(sql_upsert, data)

# 刪除資料
sql_delete = "delete from test_python where c1 = ?"
print(sql_delete)
cursor.execute(sql_delete, (3,))

# 修改資料
sql_update = "upsert into test_python(c1, c2, c3) values(?, ?, ?)"
print(sql_update)
cursor.execute(sql_update, (1, 2, '2'))

# 查詢特定資料
sql_select = "select * from test_python where c1 = ?"
print(sql_select)
cursor.execute(sql_select, (4,))
rows = cursor.fetchall()
print(rows)

# 查詢表中所有資料
sql_select_all = "select * from test_python"
print(sql_select_all)
cursor.execute(sql_select_all)
rows = cursor.fetchall()
print(rows)

# 關閉 cursor
cursor.close()

# 關閉串連
connection.close()
重要

如果寫入的字串中含有特殊字元(例如JSON字串中的雙引號),建議您通過prepared=True的方式寫入資料(上述範例程式碼所示方式),避免寫入Lindorm的資料被添加特殊的逸出字元。