MySQL資料庫與python互動
阿新 • • 發佈:2020-12-30
1.安裝引入模組
-
安裝mysql模組
pip install PyMySQL;
-
檔案中引入模組
import pymysql
2.認識Connection物件
-
用於建立與資料庫的連線
-
建立物件:呼叫connect()方法
conn = pymysql.connect(host="主機",port=3306,user="使用者名稱",passwd="密碼",db="資料庫名",charset="utf8")
如果是本機,host填'localhost',port埠號,預設3306,charset字元編碼,預設是'gb2312',要求與資料庫建立時指定的編碼一致,否則中文會亂碼
-
物件方法
- close()-------關閉連線
- commit()-----提交事務,使操作生效,在執行select查詢任務時,則不需要這一步
- rollback()----回滾事務,放棄之前的操作
- cursor()------建立cursor物件,用於執行sql語句
3.認識Cursor物件
-
執行sql語句
-
建立物件,呼叫Connection物件的cursor()方法
cur = conn.cursor()
-
物件的方法:
- close()-----關閉
- execute(sql,[,parameters])-----執行語句,返回受影響的行數,第二個引數可選,元組或列表型別,引數化可以防止sql注入風險
- fetchone()-----執行查詢語句時,獲取查詢結果集的第一個行資料,返回一個元組,未查到,則返回None。如果結果集不止一條資料,可以再次執行fetchone()獲得第二個行資料,依此類推
- fetchall()-----執行查詢時,獲取結果集的所有行,一行構成一個元組,再將這些元組裝入一個元組返回,未查到,則返回空元組()。
- scroll(value[,mode])-----將行指標移動到某個位置。mode表示移動的方式,預設值為'relative',value表示基於當前行向上(取負值)或向下(取正值)移動的行數。當mode的值為‘absolute’,value表示基於第一行資料(位置為0)向下移動的行數。
-
物件的屬性:
- rowcount只讀屬性,表示最近一次execute()執行後受影響的行數
- connection獲得當前連線物件
4.示例
-
增加、修改、刪除一條學生表資料
# coding = utf-8 import pymysql con = pymysql.connect(host='localhost',port=3306,user='root',password='123',db='test',charset='utf8') # 建立connect物件 cur = conn.cursor() #建立cursor物件 name = input('請輸入新增的學生姓名:') sql1 = 'insert into students(name) values(%s);' sql2 = 'delete from students where name = "老王";' sql3 = 'update students set name = “老張” where name = "老李";' try: cur.execute(sql1,[name]) #增加一條資料 cur.execute(sql2) #刪除一條資料 cur.execute(sql3) #修改一條資料 except Exception as e: print(e) con.rollback() # 放棄之前的所有操作 else: con.commit() # 提交,使所有操作生效 cur.close() # 關閉cursor物件 con.close() # 關閉連線
-
查詢一條學生表資料以及剩下的多行資料
# coding = utf-8 import pymysql con = pymysql.connect(host='localhost',port=3306,user='root',password='123',db='test',charset='utf8') # 建立connect物件 cur = conn.cursor() #建立cursor物件 try: sql = 'select * from students;' count = cur.execute(sql) data1 = cur.fetchone() #查詢第一行資料 print(data1) data2 = cur.fetchall() # 查詢剩下所有行資料 print(data2) except Exception as e: print(e) cur.close() con.close()