MySQL mysql-connector的具體實現(xiàn)
一、安裝與 MySQL 8.0 適配
1. 驅(qū)動安裝
安裝命令:python -m pip install mysql-connector
驗證安裝(無報錯即成功):
import mysql.connector
2. MySQL 8.0 版本用戶創(chuàng)建與遠(yuǎn)程連接
MySQL 8.0 及以上版本(主流版本)需先創(chuàng)建用戶,再單獨授權(quán)(8.0 + 不再支持 GRANT 語句中直接設(shè)置密碼):
- 步驟 1:創(chuàng)建用戶(指定允許遠(yuǎn)程訪問的 IP)
-- 示例:創(chuàng)建用戶user_test,允許IP為xx.xx.xxx.xxx的主機(jī)遠(yuǎn)程訪問 CREATE USER 'user_test'@'xx.xx.xxx.xxx' IDENTIFIED BY '你的復(fù)雜密碼';
若需允許任意 IP 遠(yuǎn)程訪問(存在安全風(fēng)險),將 IP 改為 %:
CREATE USER 'user_test'@'%' IDENTIFIED BY '你的復(fù)雜密碼';
- 步驟 2:授予遠(yuǎn)程訪問權(quán)限
-- 示例:授予用戶對所有數(shù)據(jù)庫的所有操作權(quán)限(可根據(jù)需求縮小權(quán)限范圍) GRANT ALL PRIVILEGES ON *.* TO 'user_test'@'xx.xx.xxx.xxx' WITH GRANT OPTION;
- 步驟 3:刷新權(quán)限使配置生效
FLUSH PRIVILEGES;
二、數(shù)據(jù)庫基礎(chǔ)操作
1. 創(chuàng)建數(shù)據(jù)庫
import mysql.connector
mydb = mysql.connector.connect(host="localhost", user="root", passwd="123456")
mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE runoob_db")2. 查看所有數(shù)據(jù)庫
mycursor.execute("SHOW DATABASES")
for x in mycursor:
print(x)3. 直接連接指定數(shù)據(jù)庫
mydb = mysql.connector.connect(
host="localhost",
user="root",
passwd="123456",
database="runoob_db"
)三、數(shù)據(jù)表操作
1. 創(chuàng)建數(shù)據(jù)表(需先連指定數(shù)據(jù)庫)
mycursor.execute("CREATE TABLE sites (name VARCHAR(255), url VARCHAR(255))")
2. 查看數(shù)據(jù)表
mycursor.execute("SHOW TABLES")
for x in mycursor:
print(x)3. 主鍵設(shè)置
- 創(chuàng)建表時設(shè)置:mycursor.execute("CREATE TABLE sites (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), url VARCHAR(255))")
- 表已創(chuàng)建后添加:mycursor.execute("ALTER TABLE sites ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY")
四、數(shù)據(jù)操作(增刪改查)
1. 插入數(shù)據(jù)
單條插入(需 commit() 提交):
sql = "INSERT INTO sites (name, url) VALUES (%s, %s)"
val = ("RUNOOB", "https://www.runoob.com")
mycursor.execute(sql, val)
mydb.commit()批量插入(executemany()):
val = [('Google','https://www.google.com'), ('Github','https://www.github.com')]
mycursor.executemany(sql, val)
mydb.commit()獲取插入記錄 ID:print(mycursor.lastrowid)
2. 查詢數(shù)據(jù)
查詢所有 / 指定字段:
mycursor.execute("SELECT * FROM sites") # 所有字段
mycursor.execute("SELECT name, url FROM sites") # 指定字段
myresult = mycursor.fetchall() # 所有結(jié)果
for x in myresult: print(x)單條結(jié)果:myresult = mycursor.fetchone()
條件查詢(防 SQL 注入用 % s 占位符):
sql = "SELECT * FROM sites WHERE name = %s"
mycursor.execute(sql, ("RUNOOB",))- 排序:
ORDER BY 字段 [ASC/DESC](默認(rèn)升序) - 限制條數(shù):
LIMIT 數(shù)量 [OFFSET 起始位置](起始位從 0 開始)
3. 刪除數(shù)據(jù)(務(wù)必加 WHERE 條件)
sql = "DELETE FROM sites WHERE name = %s"
mycursor.execute(sql, ("stackoverflow",))
mydb.commit()4. 更新數(shù)據(jù)(務(wù)必加 WHERE 條件)
sql = "UPDATE sites SET name = %s WHERE name = %s"
mycursor.execute(sql, ("Zhihu", "ZH"))
mydb.commit()五、刪除數(shù)據(jù)表
mycursor.execute("DROP TABLE IF EXISTS sites")
# IF EXISTS 避免表不存在報錯 六、核心注意事項
- 增 / 刪 / 改數(shù)據(jù)后,必須執(zhí)行
mydb.commit()才能生效; - MySQL 8.0 需適配認(rèn)證插件,否則無法正常連接;
- 條件操作(查 / 刪 / 改)用 % s 占位符,防止 SQL 注入;
- 刪除 / 更新操作必須加 WHERE 條件,避免誤操作全表數(shù)據(jù)。
到此這篇關(guān)于MySQL mysql-connector的具體實現(xiàn)的文章就介紹到這了,更多相關(guān)MySQL mysql-connector內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 如何通過mysql-connector-java實現(xiàn)Java與MySQL的連接詳解
- mysql-connector-java和mysql-connector-j的區(qū)別及說明
- mysql-connector-java驅(qū)動jar包下載方式
- mysql-connector-java和mysql-connector-j的區(qū)別小結(jié)
- mysql連接器之mysql-connector-java問題
- mysql-connector-java與Mysql、Java的對應(yīng)版本問題
- mysql-connector-java與mysql版本的對應(yīng)關(guān)系說明
- mysql-connector-java.jar包的下載過程詳解
相關(guān)文章
Mysql中的concat函數(shù)(拼接函數(shù))詳解
很多時候,我們需要將不同地方獲得的字符串拼接在一起,此時就需要使用CONCAT和CONCAT_WS函數(shù),這篇文章主要介紹了Mysql中的concat函數(shù)(拼接函數(shù)),需要的朋友可以參考下2023-02-02

