存測試數據python
有的時候大批量的數據,咱們須要存到數據庫中,在測試的時候才能用到,測試的時候就從數據庫中讀取出來。這點是很是重要的!mysql
存測試結果sql
python2中使用mysqldb,python3中再也不支持,換成pyMysql數據庫
1) 安裝pyMysql模塊:pip install PyMysql函數
2) python鏈接mysql數據庫,須要下載驅動:https://dev.mysql.com/downloads/connector/python/mysqlmysql官方網站提供的驅動版本,目前只支持到python3.4,python版本要與驅動支持的版本匹配才能安裝成功測試
3) 安裝mysql圖形界面Navicat,鏈接數據庫後,方便查看/編輯數據庫數據fetch
(可選)安裝mysql服務端:https://dev.mysql.com/downloads/mysql/網站
增刪改查,因此咱們要學的也是利用python去數據庫裏面讀取數據,進行增刪改查操做編碼
對數據庫進行操做步驟:spa
1. 鏈接數據庫、建立遊標
2. 準備好增、刪、改、查sql語句
3. 執行sql語句
4. 讀取執行結果—執行影響的行
5. 關閉遊標、關閉鏈接(釋放鏈接數)
數據庫鏈接信息以下:
IP地址、端口號、數據庫名字、登陸用戶名、密碼
pymysql中的鏈接數據庫方法:
conn = pymysql.Connect(host, port, db, user, passwd)
cursorclass = pymysql.cursors.DictCursor 指定返回數據爲字典形式
建立遊標:
cursor = conn.cursor() 每次操做都須要獲取遊標,才能進行
sql語句:select 字段 from 表名 where 條件語句
fetchall():返回的數據格式是列表形式的
fetchone():返回的數據格式是元組形式的(能夠用cursorclass = pymysql.cursors.DictCursor改爲字典的形式)
重點看代碼,掌握用法
execute中,sql語句的多種方式:
execute(sql語句、參數[可選]):
1. 數據直接寫在sql語句中
2. 用格式化的方式
sql語句中:列表和元組 %s代替
字典:%(鍵名)s代替
參數:爲真正的數值
例:
insert_sql = "insert into test1(id, name) values(%s, %s)"
data = [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()
#引入相關的庫 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()
運行結果:
#引入相關的庫 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'}]
列表形式
#引入相關的庫 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()
運行結果
import pymysql class Mysql_Operate: def __init__(self, host, db, user, passwd, port=3306): #鏈接數據庫 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