Python的標準數據庫接口為:Python DB-API,Python DB-API為開發人員提供了數據庫應用編程接口。
PyMySQL 是在 Python3.x 版本中用于連接 MySQL 服務器的一個實現庫,Python2中則使用mysqldb。 PyMySQL 遵循 Python 數據庫 API v2.0 規范,并包含了 pure-Python MySQL 客戶端庫。
一、安裝PyMySQL
在使用 PyMySQL 之前,我們需要確保 PyMySQL 已安裝。
PyMySQL 下載地址:https://github.com/PyMySQL/PyMySQL
如果還未安裝,我們可以使用以下命令安裝最新版的 PyMySQL:
pip install PyMySQL
二、連接數據庫
1、建表
數據庫準備,連接數據庫之前,請確保已經創建了python數據庫,以及students表
建表SQL如下:
CREATE TABLE `student` (`id` int NOT NULL AUTO_INCREMENT COMMENT '主鍵',`stu_name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '學生名字',`stu_class` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '學生班級',`stu_age` int NULL DEFAULT NULL COMMENT '學生年齡',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '學生表' ROW_FORMAT = Dynamic;
2、創建Connection 對象:用于建立與數據庫的連接
from pymysql import *
# 導入pymysql模塊
# 創建連接對象 Connection對象
# host:數據庫主機地址
# user:數據庫賬號
# password:數據庫密碼
# database : 需要連接的數據庫的名稱
# port: mysql的端口號
# charset: 通信采用編碼格式
conn = connect(host='127.0.0.1', user='root', password='mysql', database='python', port=3306, charset='utf8')
1、Connection 連接對象擁有的方法
close():關閉連接,連接數據庫跟打開文件一樣,操作完成之后需要關閉,否則會占用連接
commit():提交,pymysql 默認開啟事物,所以每次更新數據庫都要提交 rollback()回滾,事務回滾
cursor():返回Cursor對象,用于執行sql語句并獲得結果
2、獲取cursor對象
cur = conn.cursor() # cursor對象用于執行sql語句
3、cursor對象擁有的方法
close():關閉cursor對象
execute(operation [, parameters ]) 執行語句,返回受影響的行數,可以執行所有語句
fetchone():獲取查詢結果集的第一個行數據,返回一個元組
fetchall():執行查詢時,獲取結果集的所有行,一行構成一個元組,再將這些元組裝入一個元組返回
3、SQL增刪改查
1、插入語句
insertSql = '''insert into student(stu_name,stu_class,stu_age) values ('張三','高三一班',18)'''
cur.execute(insertSql)
conn.commit() # 提交事務
2、查詢語句
cur.execute('select * from students;') # 執行sql語句,select * from students;
res = cur.fetchone() # 獲取結果集的第一條數據
res1 = cur.fetchall() # 獲取結果及的所有數據
print(res) # 將獲取的查詢結果打印
print(res1)
3、占位符:%s
執行sql語句參數化,參數化sql語句中使用%s占位。 execute(operation [parameters]) 執行語句,返回受影響的行數,可以執行所有語句 [parameters] 參數列表
# sql語句中使用%s占位
sql = 'select * from students where id=%s and stu_name= %s;'
# 執行sql語句
cur.execute(sql, [1,'張三'])
from pymysql import *'''
創建Connection 對象:用于建立與數據庫的連接
導入pymysql模塊
# 創建連接對象 Connection對象
# host:數據庫主機地址
# user:數據庫賬號
# password:數據庫密碼
# database : 需要連接的數據庫的名稱
# port: mysql的端口號
# charset: 通信采用編碼格式
'''
conn = connect(host='localhost', port=3306, user='root', password='mysql', database='my_db', charset='utf8')try:# 創建游標對象cur = conn.cursor()# 執行sql語句# insertSql = '''insert into student(stu_name,stu_class,stu_age) values ('張三','高三一班',18);'''# cur.execute(insertSql)# conn.commit() # 提交事務selectSql = '''select * from student where id=%s;'''cur.execute(selectSql,3)# selectSql = '''select * from student;'''# cur.execute(selectSql)# res = cur.fetchone() # 獲取結果集的第一條數據# print(res)# 獲取結果及的所有數據result = cur.fetchall()for item in result:# 姓名:張三,班級:高三一班,年齡:18print('姓名:{0},班級:{1},年齡:{2}'.format(item[1], item[2], item[3]))
except Exception as msg:print(msg.args)
finally:# 關閉游標對象cur.close()# 關閉連接對象conn.close()
三、封裝連接PyMySQL數據庫工具
創建一個db_client.py文件
import pymysqlclass DBUtil():conn=None@classmethoddef get_conn(cls):if cls.conn is None:cls.conn=pymysql.connect(host="localhost",port=3306,user="root",password="mysql",database="my_db",charset="utf8")return cls.conn@classmethoddef close_conn(cls):if cls.conn is not None:cls.conn.close()cls.conn=None@classmethoddef select_all(cls,sql):cursor=Noneresult=Nonetry:cls.get_conn()cursor=cls.conn.cursor()cursor.execute(sql)result=cursor.fetchall()except Exception as e:print(e)finally:cursor.close()cls.close_conn()return result@classmethoddef uid(cls,sql):cursor=Nonetry:cls.get_conn()cursor=cls.conn.cursor()cursor.execute(sql)cls.conn.commit()except Exception as e:print(e)cls.conn.rollback()finally:cursor.close()cls.close_conn()
print('--------數據庫工具DB--------')
# ((3, '張三', '高三一班', 18), (4, '李四', '高三二班', 16))
print(DBUtil.select_all("select * from student"))