一. 資料庫在自動化測驗中的應用
存測驗資料
有的時候大批量的資料,我們需要存到資料庫中,在測驗的時候才能用到,測驗的時候就從資料庫中讀取出來,這點是非常重要的!
存測驗結果
二. python中的資料庫之必備前提條件
1. 安裝:pyMysql
python2中使用mysqldb,python3中不再支持,換成pyMysql
2. 安裝步驟
-
安裝pyMysql模塊:pip install PyMysql
-
python連接mysql資料庫,需要下載驅動:https://dev.mysql.com/downloads/connector/python/mysqlmysql官方網站提供的驅動版本,目前只支持到python3.4,python版本要與驅動支持的版本匹配才能安裝成功
-
安裝mysql圖形界面Navicat,連接資料庫后,方便查看/編輯資料庫資料
(可選)安裝mysql服務端:https://dev.mysql.com/downloads/mysql/
3. 資料庫的常規操作
增刪改查,所以我們要學的也是利用python去資料庫里面讀取資料,進行增刪改查操作
三. python—mysql操作
對資料庫進行操作步驟:
-
連接資料庫、創建游標
-
準備好增、刪、改、查sql陳述句
-
執行sql陳述句
-
讀取執行結果—執行影響的行
-
關閉游標、關閉連接(釋放連接數)
資料庫連接資訊如下:
IP地址、埠號、資料庫名字、登錄用戶名、密碼
pymysql中的連接資料庫方法:
conn = pymysql.Connect(host, port, db, user, passwd)
cursorclass = pymysql.cursors.DictCursor 指定回傳資料為字典形式
創建游標:
cursor = conn.cursor() 每次操作都需要獲取游標,才能進行
四. python之查詢資料
1. 查詢資料語法
sql陳述句:select 欄位 from 表名 where 條件陳述句
2. 展示資料,需要呼叫如下函式
fetchall():回傳的資料格式是串列形式的
fetchone():回傳的資料格式是元組形式的(可以用cursorclass = pymysql.cursors.DictCursor改成字典的形式)
3. 條件陳述句的用法
重點看代碼,掌握用法
五. python之execute
execute中,sql陳述句的多種方式:
execute(sql陳述句、引數[可選]):
-
資料直接寫在sql陳述句中
-
用格式化的方式
sql陳述句中:串列和元組 %s代替
字典:%(鍵名)s代替
引數:為真正的數值
例:
insert_sql = "insert into test1(id, name) values(%s, %s)"
data = https://www.cnblogs.com/xxpythonxx/p/[14,'xiaojian']
#字典
data1 = {'id': 14, 'name': 'xiaojian'}
insert_sql = "insert into test1(id, name) values(%(id)s, %(name)s)"
cursor.execute(insert_sql, data)
六. 提交和回滾
提交操作:在對資料庫進行任何修改的情況下,都使用commit函式來提交操作
修改包括增加、修改、洗掉資料等操作
提交修改:
conn.commit()
回滾操作:在對資料庫進行修改的程序中,因任何例外而導致修改中斷,我們都應該使用回滾操作使資料庫恢復到修改之前的狀態
回滾修改:
conn.rollback()
七. 實體
實體1:增加資料
#引入相關的庫
import pymysql
mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "123456"
#連接操作:編碼格式的指定,默認回傳資料型別的指定
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,
db=mysql_db, port=mysql_port, charset="utf8mb4", cursorclass=pymysql.cursors.DictCursor)
#獲取游標 cur = conn.cursor()
#sql陳述句——增加資料
sql_insert = "insert into python6(name, sex) values('xiaohua', 'female')"
#執行sql陳述句
try:
cur.execute(sql_insert)
conn.commit()
except:
conn.rollback()
#關閉連接、關閉游標
cur.close()
conn.close()
運行結果:

實體2:查詢資料
#引入相關的庫
import pymysql
mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "123456"
#連接操作:編碼格式的指定,默認回傳資料型別的指定
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,
db=mysql_db, port=mysql_port, charset="utf8mb4",
cursorclass=pymysql.cursors.DictCursor)
#獲取游標
cur = conn.cursor()
#查詢陳述句
sql_select = "select * from python6"
#執行
cur.execute(sql_select)
#獲取查詢結果——會獲取一條資料
data_a = cur.fetchone()
print(data_a)
print("=============================")
#獲取查詢結果——獲取所有條資料(游標已經到了第二條,從第二條開始讀)
data_all = cur.fetchall()
print(data_all)
#關閉連接、關閉游標
cur.close()
conn.close()
運行結果
{'id': 1, 'sex': 'male', 'name': 'xiaozhai'}
=============================
[{'id': 2, 'sex': 'male', 'name': 'xiaoli'}, {'id': 3, 'sex': 'female', 'name': 'xiaohua'}]
實體3:格式化方式插入資料
串列形式
#引入相關的庫
import pymysql
mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "123456"
#連接操作:編碼格式的指定,默認回傳資料型別的指定
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,
db=mysql_db, port=mysql_port, charset="utf8mb4",
cursorclass=pymysql.cursors.DictCursor)
#獲取游標
cur = conn.cursor()
#格式化方式插入資料
data_list = ["xiaozhao", "female"]
sql_insert = "insert into python6(name, sex) values(%s, %s)"
#執行sql陳述句
try:
cur.execute(sql_insert, data_list)
conn.commit()
except:
conn.rollback()
#關閉連接、關閉游標
cur.close()
conn.close()
運行結果

字典形式
#引入相關的庫
import pymysql
mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "123456"
#連接操作:編碼格式的指定,默認回傳資料型別的指定
conn = pymysql.Connect(host=mysql_host, user=mysql_user, password=mysql_passwd,
db=mysql_db, port=mysql_port, charset="utf8mb4",
cursorclass=pymysql.cursors.DictCursor)
#獲取游標
cur = conn.cursor()
#格式化方式插入資料
data_dict = {"name": "xiaoliu", "sex":"female"}
sql_insert = "insert into python6(name, sex) values (%(name)s, %(sex)s)"
#執行sql陳述句
try:
cur.execute(sql_insert, data_dict)
conn.commit()
except:
conn.rollback()
#關閉連接、關閉游標
cur.close()
conn.close()
運行結果

實體4:封裝成類
import pymysql
class Mysql_Operate:
def __init__(self, host, db, user, passwd, port=3306):
#python學習交流群:711312441
#連接資料庫
try:
self.conn = pymysql.Connect(host=host, user=user, password=passwd,
db=db, port=port, charset="utf8mb4",
cursorclass=pymysql.cursors.DictCursor)
#獲取游標
self.cur = self.conn.cursor()
#沒有例外,connect_flag為0
self.connect_flag = 0
except Exception as e:
print(e)
self.connect_flag = 1
#查找
def select_all_datas(self, select_sql):
#查詢資料——execute函式
self.cur.execute(select_sql)
#獲取所有的資料并回傳
data_all = self.cur.fetchall()
return data_all
#更新資料
def update_datas(self, update_sql ):
try:
self.cur.execute(update_sql)
self.conn.commit()
return True
except:
self.conn.rollback()
return False
#關閉資料庫連接
def close_db(self):
self.cur.close()
self.conn.close()
mysql_host = "localhost"
mysql_port = 3306
mysql_db = "xiaozhai"
mysql_user = "root"
mysql_passwd = "123456"
ms = Mysql_Operate(mysql_host, mysql_user, mysql_passwd, mysql_db)
if ms.connect_flag == 0:
pass
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/540863.html
標籤:Python
上一篇:當我把用Python做的課堂點名系統獻給各科老師后,再也沒掛過科
下一篇:Generator(生成器),入門扯訓,Coroutine(原生協程),登峰造極,Python3.10并發異步編程async底層實作
