mysql-connector-python是MySQL官方提供的Python連接器,不依賴C語言標準函數庫,使用更便捷。本文介紹如何在Python中通過mysql-connector-python連接Lindorm寬表引擎。
前提條件
已安裝Python環境,且Python版本為3.8及以上版本。
已開通MySQL協議兼容功能。如何開通,請參見開通MySQL協議兼容功能。
已將客戶端IP添加至白名單,具體操作請參見設置白名單。
操作步驟
安裝8.0.11版本的mysql-connector-python。您也可以通過
pip install mysql-connector-python==8.0.11
語句直接通過pip進行安裝。創建連接并配置連接參數。
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數據庫。
通過寬表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的數據被添加特殊的轉義字符。