[Python] MySQL 資料操作

前言

本篇用於紀錄使用Python操作MySQL

安裝MySQL

因為之前有下載MAMP,裡面已經安裝過MySQL。

安裝pysql

1
2
3
pip install pymysql

pip3 install pymysql

安裝完成後建立名為crud_test的資料庫。

實作

引入pymysql並創建cursor

1
2
3
4
import pymysql
db = pymysql.connect("127.0.0.1", port=8889 , user="root", password="root", db="crud_test", charset='utf8') # db為指定的資料庫名稱
#建立操作游標
cursor = db.cursor()

cursor()為獲得python執行MySQL語法的方法

查詢資料庫版本

sql查詢指令為SELECT VERSION()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#==========  查詢資料庫版本  =======
sql = 'SELECT VERSION()'

#執行語法
cursor.execute(sql)
print("Success!!!!")
#選取第一筆結果
data = cursor.fetchone()

print ("Database version : %s " % data)
#關閉連線
db.close()

# 回傳結果:Database version : 5.6.35

新增資料

先定義表格結構

insert語法:

insert into 資料表名稱(欄位1, 欄位2, 欄位3....) values (欄位1的值,欄位2的值, 欄位3的值.... );

範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pymysql
from datetime import datetime
db = pymysql.connect("127.0.0.1", port=8889 , user="root", password="root", db="crud_test", charset='utf8')
#建立操作游標
cursor = db.cursor()

# sql 新增
sql = "insert into student_record(sid, name, gender, age, score) values (1, 'Jean', 'female', '20', 100);"

#執行語法
try:
cursor.execute(sql)
#提交修改
db.commit()
print('success')
except:
#發生錯誤時停止執行SQL
db.rollback()
print('error')

# 提交commit,不然無法存新建或者修改的資料
db.commit()
# #選取第一筆結果
data = cursor.fetchone()

務必記得提交commit,不然無法存新建或者修改的資料

查看結果:新增成功一筆資料

修改資料

update語法:

update record set 欄位名 where 更新條件

set後面接更新目標的欄位,where後面接更新的條件

範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pymysql
from datetime import datetime
db = pymysql.connect("127.0.0.1", port=8889 , user="root", password="root", db="crud_test", charset='utf8')
#建立操作游標
cursor = db.cursor()
# sql 修改
sql = "update record set name= 'Tony' where age = '30' "
try:
cursor.execute(sql)
#提交修改
db.commit()
print('success')
except:
#發生錯誤時停止執行SQL
db.rollback()
print('error')

db.commit() # 提交commit,不然無法存新建或者修改的資料
#選取第一筆結果
data = cursor.fetchone()


#關閉連線
db.close()

查詢

select 目標欄位 from 資料表,返回值的資料型態為tuple

範例(選取第一筆結果):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import pymysql
from datetime import datetime
db = pymysql.connect("127.0.0.1", port=8889 , user="root", password="root", db="crud_test", charset='utf8')
#建立操作游標
cursor = db.cursor()
# sql 查詢
sql = "select * from student_record"


#執行語法
try:
cursor.execute(sql)
#提交修改
db.commit()
print('success')
except:
#發生錯誤時停止執行SQL
db.rollback()
print('error')
# 提交commit,不然無法存新建或者修改的資料
db.commit()
#選取第一筆結果
data = cursor.fetchone()
print(data)

# (1, 'Jean', 'female', 20, 100)

範例(選取全部結果):

採用fetchall()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import pymysql
from datetime import datetime
db = pymysql.connect("127.0.0.1", port=8889 , user="root", password="root", db="crud_test", charset='utf8')
#建立操作游標
cursor = db.cursor()
# sql 查詢
sql = "select * from student_record"


#執行語法
try:
cursor.execute(sql)
#提交修改
db.commit()
print('success')
except:
#發生錯誤時停止執行SQL
db.rollback()
print('error')
# 提交commit,不然無法存新建或者修改的資料
db.commit()
#選取第一筆結果
data = cursor.fetchall()
print(data)

# ((1, 'Jean', 'female', 20, 100), (2, 'Tom', 'male', 21, 70), (3, 'Tony', 'male', 22, 60), (4, 'Jack', 'male', 30, 90))

範例(指定取回查詢筆數):

fetchmany(size= number)size限制查詢筆數。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import pymysql
from datetime import datetime
db = pymysql.connect("127.0.0.1", port=8889 , user="root", password="root", db="crud_test", charset='utf8')
#建立操作游標
cursor = db.cursor()
# sql 查詢
sql = "select * from student_record"

#執行語法
try:
cursor.execute(sql)
#提交修改
db.commit()
print('success')
except:
#發生錯誤時停止執行SQL
db.rollback()
print('error')
# 提交commit,不然無法存新建或者修改的資料
db.commit()
#選取第一筆結果
data = cursor.fetchmany(size=2)
print(data)

# ((1, 'Jean', 'female', 20, 100), (2, 'Tom', 'male', 21, 70))

刪除

delete from 資料表名稱 where 刪除條件

範例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import pymysql
from datetime import datetime
db = pymysql.connect("127.0.0.1", port=8889 , user="root", password="root", db="crud_test", charset='utf8')
#建立操作游標
cursor = db.cursor()
# sql 查詢
sql = "delete from student_record where name= 'Jack' "

#執行語法
try:
cursor.execute(sql)
#提交修改
db.commit()
print('success')
except:
#發生錯誤時停止執行SQL
db.rollback()
print('error')
# 提交commit,不然無法存新建或者修改的資料
db.commit()
#選取第一筆結果
data = cursor.fetchmany(size=2)
print(data)

結果

參考文章

Day22- Python X MySql 2

Comments