Python3連接MySQL
本文介紹Python3連接MySQL的第三方庫--PyMySQL的基本使用。
PyMySQL介紹
PyMySQL 是在 Python3.x 版本中用于連接 MySQL 服務器的一個庫,Python2中則使用mysqldb。
Django中也可以使用PyMySQL連接MySQL數據庫。
PyMySQL安裝pip?install?pymysql
連接數據庫
注意事項
在進行本文以下內容之前需要注意:你有一個MySQL數據庫,并且已經啟動。
你有可以連接該數據庫的用戶名和密碼
你有一個有權限操作的database
基本使用#?導入pymysql模塊
import?pymysql
#?連接database
conn?=?pymysql.connect(host=“你的數據庫地址”,?user=“用戶名”,password=“密碼”,database=“數據庫名”,charset=“utf8”)
#?得到一個可以執行SQL語句的光標對象
cursor?=?conn.cursor()
#?定義要執行的SQL語句
sql?=?"""
CREATE?TABLE?USER1?(
id?INT?auto_increment?PRIMARY?KEY?,
name?CHAR(10)?NOT?NULL?UNIQUE,
age?TINYINT?NOT?NULL
)ENGINE=innodb?DEFAULT?CHARSET=utf8;
"""
#?執行SQL語句
cursor.execute(sql)
#?關閉光標對象
cursor.close()
#?關閉數據庫連接
conn.close()
返回字典格式數據:#?導入pymysql模塊
import?pymysql
#?連接database
conn?=?pymysql.connect(host=“你的數據庫地址”,?user=“用戶名”,password=“密碼”,database=“數據庫名”,charset=“utf8”)
#?得到一個可以執行SQL語句并且將結果作為字典返回的游標
cursor?=?conn.cursor(cursor=pymysql.cursors.DictCursor)
#?定義要執行的SQL語句
sql?=?"""
CREATE?TABLE?USER1?(
id?INT?auto_increment?PRIMARY?KEY?,
name?CHAR(10)?NOT?NULL?UNIQUE,
age?TINYINT?NOT?NULL
)ENGINE=innodb?DEFAULT?CHARSET=utf8;
"""
#?執行SQL語句
cursor.execute(sql)
#?關閉光標對象
cursor.close()
#?關閉數據庫連接
conn.close()
注意:
charset=“utf8”,編碼不要寫成"utf-8"
增刪改查操作
增#?導入pymysql模塊
import?pymysql
#?連接database
conn?=?pymysql.connect(host=“你的數據庫地址”,?user=“用戶名”,password=“密碼”,database=“數據庫名”,charset=“utf8”)
#?得到一個可以執行SQL語句的光標對象
cursor?=?conn.cursor()
sql?=?"INSERT?INTO?USER1(name,?age)?VALUES?(%s,?%s);"
username?=?"Alex"
age?=?18
#?執行SQL語句
cursor.execute(sql,?[username,?age])
#?提交事務
conn.commit()
cursor.close()
conn.close()
插入數據失敗回滾
在執行增刪改操作時,如果不想提交前面的操作,可以使用 rollback() 回滾取消操作。#?導入pymysql模塊
import?pymysql
#?連接database
conn?=?pymysql.connect(host=“你的數據庫地址”,?user=“用戶名”,password=“密碼”,database=“數據庫名”,charset=“utf8”)
#?得到一個可以執行SQL語句的光標對象
cursor?=?conn.cursor()
sql?=?"INSERT?INTO?USER1(name,?age)?VALUES?(%s,?%s);"
username?=?"Alex"
age?=?18
try:
#?執行SQL語句
cursor.execute(sql,?[username,?age])
#?提交事務
conn.commit()
except?Exception?as?e:
#?有異常,回滾事務
conn.rollback()
cursor.close()
conn.close()
獲取插入數據的ID(關聯操作時會用到)#?導入pymysql模塊
import?pymysql
#?連接database
conn?=?pymysql.connect(host=“你的數據庫地址”,?user=“用戶名”,password=“密碼”,database=“數據庫名”,charset=“utf8”)
#?得到一個可以執行SQL語句的光標對象
cursor?=?conn.cursor()
sql?=?"INSERT?INTO?USER1(name,?age)?VALUES?(%s,?%s);"
username?=?"Alex"
age?=?18
try:
#?執行SQL語句
cursor.execute(sql,?[username,?age])
#?提交事務
conn.commit()
#?提交之后,獲取剛插入的數據的ID
last_id?=?cursor.lastrowid
except?Exception?as?e:
#?有異常,回滾事務
conn.rollback()
cursor.close()
conn.close()
批量執行#?導入pymysql模塊
import?pymysql
#?連接database
conn?=?pymysql.connect(host=“你的數據庫地址”,?user=“用戶名”,password=“密碼”,database=“數據庫名”,charset=“utf8”)
#?得到一個可以執行SQL語句的光標對象
cursor?=?conn.cursor()
sql?=?"INSERT?INTO?USER1(name,?age)?VALUES?(%s,?%s);"
data?=?[("Alex",?18),?("Egon",?20),?("Yuan",?21)]
try:
#?批量執行多條插入SQL語句
cursor.executemany(sql,?data)
#?提交事務
conn.commit()
except?Exception?as?e:
#?有異常,回滾事務
conn.rollback()
cursor.close()
conn.close()
刪#?導入pymysql模塊
import?pymysql
#?連接database
conn?=?pymysql.connect(host=“你的數據庫地址”,?user=“用戶名”,password=“密碼”,database=“數據庫名”,charset=“utf8”)
#?得到一個可以執行SQL語句的光標對象
cursor?=?conn.cursor()
sql?=?"DELETE?FROM?USER1?WHERE?id=%s;"
try:
cursor.execute(sql,?[4])
#?提交事務
conn.commit()
except?Exception?as?e:
#?有異常,回滾事務
conn.rollback()
cursor.close()
conn.close()
改#?導入pymysql模塊
import?pymysql
#?連接database
conn?=?pymysql.connect(host=“你的數據庫地址”,?user=“用戶名”,password=“密碼”,database=“數據庫名”,charset=“utf8”)
#?得到一個可以執行SQL語句的光標對象
cursor?=?conn.cursor()
#?修改數據的SQL語句
sql?=?"UPDATE?USER1?SET?age=%s?WHERE?name=%s;"
username?=?"Alex"
age?=?80
try:
#?執行SQL語句
cursor.execute(sql,?[age,?username])
#?提交事務
conn.commit()
except?Exception?as?e:
#?有異常,回滾事務
conn.rollback()
cursor.close()
conn.close()
查
查詢單條數據#?導入pymysql模塊
import?pymysql
#?連接database
conn?=?pymysql.connect(host=“你的數據庫地址”,?user=“用戶名”,password=“密碼”,database=“數據庫名”,charset=“utf8”)
#?得到一個可以執行SQL語句的光標對象
cursor?=?conn.cursor()
#?查詢數據的SQL語句
sql?=?"SELECT?id,name,age?from?USER1?WHERE?id=1;"
#?執行SQL語句
cursor.execute(sql)
#?獲取單條查詢數據
ret?=?cursor.fetchone()
cursor.close()
conn.close()
#?打印下查詢結果
print(ret)
查詢多條數據#?導入pymysql模塊
import?pymysql
#?連接database
conn?=?pymysql.connect(host=“你的數據庫地址”,?user=“用戶名”,password=“密碼”,database=“數據庫名”,charset=“utf8”)
#?得到一個可以執行SQL語句的光標對象
cursor?=?conn.cursor()
#?查詢數據的SQL語句
sql?=?"SELECT?id,name,age?from?USER1;"
#?執行SQL語句
cursor.execute(sql)
#?獲取多條查詢數據
ret?=?cursor.fetchall()
cursor.close()
conn.close()
#?打印下查詢結果
print(ret)
進階用法#?可以獲取指定數量的數據
cursor.fetchmany(3)
#?光標按絕對位置移動1
cursor.scroll(1,?mode="absolute")
#?光標按照相對位置(當前位置)移動1
cursor.scroll(1,?mode="relative")