本篇文章使用 mysql-connector 來連接使用 MySQL, mysql-connector 是 MySQL 官方提供的驅動器。
我們可以使用 pip 命令來安裝 mysql-connector:
python -m pip install mysql-connector //cmd界面執行
使用以下代碼測試是否安裝成功
import mysql.connector //如果沒有報錯說明安裝成功
**注意:**如果你的MySQL是8.0版本,則需要修改加密規則,否則後面連接數據庫時會報錯,詳情請參照Navicat連接mysql報錯 1251錯誤
創建數據庫連接
# 導入模塊
import mysql.connector
# 創建數據庫連接
mydb = mysql.connector.connect(
host='localhost', #數據庫地址
user='root', #數據庫用戶名
passwd='your—passwd', #數據庫密碼
)
創建數據庫
創建數據庫使用create database語句,下面創建一個名為learning的數據庫
# 導入模塊
import mysql.connector
# 創建數據庫連接
mydb = mysql.connector.connect(
host='localhost', #數據庫地址
user='root', #數據庫用戶名
passwd='your—passwd', #數據庫密碼
)
my_cursor = mydb.cursor() #使用cursor方法獲取操作游標
my_cursor.execute("create database learning") #使用execute方法執行sql語句
查看所有數據庫
# 導入模塊
import mysql.connector
# 創建數據庫連接
mydb = mysql.connector.connect(
host='localhost', #數據庫地址
user='root', #數據庫用戶名
passwd='your—passwd', #數據庫密碼
)
my_cursor = mydb.cursor() #使用cursor方法獲取操作游標
my_cursor.execute("show databases") #使用execute方法執行sql語句
for i in my_cursor: #使用for循環打印每個數據庫
print(i)
現在有了數據庫,我們可以直接連接數據庫,只需在connect中配置一條語句
# 創建數據庫連接
mydb = mysql.connector.connect(
host='localhost', #數據庫地址
user='root', #數據庫用戶名
passwd='your—passwd', #數據庫密碼
database='learning', #配置數據庫名
)
創建數據表
創建數據表使用create table語句,創建數據表前,需要確保數據庫已存在,以下創建一個名為 users 的數據表:
# 導入模塊
import mysql.connector
# 創建數據庫連接
mydb = mysql.connector.connect(
host='localhost', #數據庫地址
user='root', #數據庫用戶名
passwd='your—passwd', #數據庫密碼
database='learning', #配置數據庫名
)
my_cursor = mydb.cursor() #使用cursor方法獲取操作游標
my_cursor.execute("create table users (name varchar(20), age int, male varchar(20) )") #使用execute方法執行sql語句
執行成功後可以看到數據庫中多了一張users表
創建表的時候我們一般都會設置一個主鍵(PRIMARY KEY),我們可以使用 “INT AUTO_INCREMENT PRIMARY KEY” 語句來創建一個主鍵,主鍵起始值為 1,逐步遞增。
如果我們的表已經創建,我們需要使用 ALTER TABLE 來給表添加主鍵:
# 導入模塊
import mysql.connector
# 創建數據庫連接
mydb = mysql.connector.connect(
host='localhost', #數據庫地址
user='root', #數據庫用戶名
passwd='your—passwd', #數據庫密碼
database='learning', #配置數據庫名
)
my_cursor = mydb.cursor() #使用cursor方法獲取操作游標
my_cursor.execute("ALTER TABLE users ADD COLUMN id INT AUTO_INCREMENT PRIMARY KEY") #使用execute方法執行sql語句
插入數據
插入數據使用 insert into語句:
# 導入模塊
import mysql.connector
# 創建數據庫連接
mydb = mysql.connector.connect(
host='localhost', #數據庫地址
user='root', #數據庫用戶名
passwd='your—passwd', #數據庫密碼
database='learning', #配置數據庫名
)
my_cursor = mydb.cursor() #使用cursor方法獲取操作游標
my_cursor.execute("insert into users(name, age, male) values('admin', '20', 'M')") #使用execute方法執行sql語句
mydb.commit() # 數據表內容有更新,必須使用到該語句
print(my_cursor.rowcount, "條記錄已更新") #rowcount方法返回sql語句執行後影響的行數
輸出結果為
1 條記錄已更新
如果我們想在數據記錄插入後,獲取該記錄的 ID ,可以使用以下代碼:
# 導入模塊
import mysql.connector
# 創建數據庫連接
mydb = mysql.connector.connect(
host='localhost', #數據庫地址
user='root', #數據庫用戶名
passwd='your—passwd', #數據庫密碼
database='learning', #配置數據庫名
)
my_cursor = mydb.cursor() #使用cursor方法獲取操作游標
my_cursor.execute("insert into users(name, age, male) values('admin', '20', 'M')") #使用execute方法執行sql語句
mydb.commit() # 數據表內容有更新,必須使用到該語句
print("1 條記錄已插入, ID:", my_cursor.lastrowid)
結果為
1 條記錄已插入, ID: 3
查詢數據
查詢數據使用 select 語句:
# 導入模塊
import mysql.connector
# 創建數據庫連接
mydb = mysql.connector.connect(
host='localhost', #數據庫地址
user='root', #數據庫用戶名
passwd='your—passwd', #數據庫密碼
database='learning', #配置數據庫名
)
my_cursor = mydb.cursor() #使用cursor方法獲取操作游標
my_cursor.execute("select * from users") #使用execute方法執行sql語句
result = my_cursor.fetchall() #fetchall()方法獲取全部數據
for i in my_cursor:
print(i)
刪除記錄
刪除記錄使用 delete from 語句:
# 導入模塊
import mysql.connector
# 創建數據庫連接
mydb = mysql.connector.connect(
host='localhost', #數據庫地址
user='root', #數據庫用戶名
passwd='your—passwd', #數據庫密碼
database='learning', #配置數據庫名
)
my_cursor = mydb.cursor() #使用cursor方法獲取操作游標
sql = "delete from users where id=1"
my_cursor.execute(sql) #使用execute方法執行sql語句
mydb.commit() # 數據表內容有更新,必須使用到該語句
為了防止數據庫查詢發生 SQL 注入的攻擊,我們可以使用 %s 占位符來轉義刪除語句的條件:
# 導入模塊
import mysql.connector
# 創建數據庫連接
mydb = mysql.connector.connect(
host='localhost', #數據庫地址
user='root', #數據庫用戶名
passwd='your—passwd', #數據庫密碼
database='learning', #配置數據庫名
)
my_cursor = mydb.cursor() #使用cursor方法獲取操作游標
sql = "delete from users where id=%s"
val = (2,)
my_cursor.execute(sql,val) #使用execute方法執行sql語句
mydb.commit()
print(my_cursor.rowcount, "條記錄已刪除")
更新表數據
數據表更新使用 update 語句
# 導入模塊
import mysql.connector
# 創建數據庫連接
mydb = mysql.connector.connect(
host='localhost', #數據庫地址
user='root', #數據庫用戶名
passwd='your—passwd', #數據庫密碼
database='learning', #配置數據庫名
)
my_cursor = mydb.cursor() #使用cursor方法獲取操作游標
sql = "update users set name='root' where name='admin' " #把admin的名字改為root
my_cursor.execute(sql) #使用execute方法執行sql語句
mydb.commit() # 數據表內容有更新,必須使用到該語句
print(my_cursor.rowcount, "條記錄已更新")
為了防止數據庫查詢發生 SQL 注入的攻擊,我們可以使用 %s 占位符來轉義更新語句的條件:
# 導入模塊
import mysql.connector
# 創建數據庫連接
mydb = mysql.connector.connect(
host='localhost', #數據庫地址
user='root', #數據庫用戶名
passwd='your—passwd', #數據庫密碼
database='learning', #配置數據庫名
)
my_cursor = mydb.cursor() #使用cursor方法獲取操作游標
sql = "update users set name=%s where name=%s " #把admin的名字改為root
val = ('root', 'admin')
my_cursor.execute(sql, val) #使用execute方法執行sql語句
mydb.commit() # 數據表內容有更新,必須使用到該語句
print(my_cursor.rowcount, "條記錄已更新")
刪除表
刪除表使用 drop table 語句
# 導入模塊
import mysql.connector
# 創建數據庫連接
mydb = mysql.connector.connect(
host='localhost', #數據庫地址
user='root', #數據庫用戶名
passwd='your—passwd', #數據庫密碼
database='learning', #配置數據庫名
)
my_cursor = mydb.cursor() #使用cursor方法獲取操作游標
sql = "drop table users"
my_cursor.execute(sql) #使用execute方法執行sql語句