一:Python操作MySQL步驟
1:Python中操作MySQL的步驟
2.引入模塊
在.py文件中引入pymysql模塊
import pymysql
pymysql是python的一個第三方與mysql交互的庫,需要安裝
pip install pymsql
3.Connection 對象
用於建立與數據庫的連接
創建對象,調用connect()方法
conn = connect(參數列表)
- 參數host:連接的mysql主機,如果本機是'localhost'
- 參數port:連接的mysql主機的端口,默認是3306
- 參數database:數據庫的名稱
- 參數user:連接的用戶名
- 參數password:連接的密碼
- 參數charset:通信采用的編碼方式,推薦使用utf8
對象方法:
- close()關閉連接
- commit()提交
- cursor()返回Cursor對象,用於執行sql語句並獲得結果
4.Cursor()
- 用於執行sql語句,使用頻度最高的語句為select、insert、update、delete
- 獲取Cursor對象:調用Connection對象的cursor()方法
cs1 = conn.cursor()
對象的方法
- close()關閉
- execute(operation [, parameters ])執行語句,返回受影響的行數,主要用於執行insert、update、delete語句,也可以執行create、alter、drop等語句
- fetchone()執行查詢語句時,獲取查詢結果集的第一個行數據,返回一個元組
- fetchall()執行查詢時,獲取結果集的所有行,一行構成一個元組,再將這些元組裝入一個元組返回
對象的屬性
- rowcount只讀屬性,表示最近一次execute()執行后受影響的行數
- connection獲得當前連接對象
二:增刪改查
1.增刪改
from pymysql import * def main(): # 創建Connection連接 conn = connect(host='localhost',port=3306,database='jing_dong',user='root',password='mysql',charset='utf8') # 獲得Cursor對象 cs1 = conn.cursor() # 執行insert語句,並返回受影響的行數:添加一條數據 # 增加 count = cs1.execute('insert into goods_cates(name) values("硬盤")') #打印受影響的行數 print(count) count = cs1.execute('insert into goods_cates(name) values("光盤")') print(count) # # 更新 # count = cs1.execute('update goods_cates set name="機械硬盤" where name="硬盤"') # # 刪除 # count = cs1.execute('delete from goods_cates where id=6') # 提交之前的操作,如果之前已經之執行過多次的execute,那么就都進行提交 conn.commit() # 關閉Cursor對象 cs1.close() # 關閉Connection對象 conn.close() if __name__ == '__main__': main()
2.查詢一條數據
from pymysql import * def main(): # 創建Connection連接 conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8') # 獲得Cursor對象 cs1 = conn.cursor() # 執行select語句,並返回受影響的行數:查詢一條數據 count = cs1.execute('select id,name from goods where id>=4') # 打印受影響的行數 print("查詢到%d條數據:" % count) for i in range(count): # 獲取查詢的結果 result = cs1.fetchone() # 打印查詢的結果 print(result) # 獲取查詢的結果 # 關閉Cursor對象 cs1.close() conn.close() if __name__ == '__main__': main()
3.查詢多行數據
from pymysql import * def main(): # 創建Connection連接 conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8') # 獲得Cursor對象 cs1 = conn.cursor() # 執行select語句,並返回受影響的行數:查詢一條數據 count = cs1.execute('select id,name from goods where id>=4') # 打印受影響的行數 print("查詢到%d條數據:" % count) # for i in range(count): # # 獲取查詢的結果 # result = cs1.fetchone() # # 打印查詢的結果 # print(result) # # 獲取查詢的結果 result = cs1.fetchall() print(result) # 關閉Cursor對象 cs1.close() conn.close() if __name__ == '__main__': main()
三:參數化
sql語句的參數化,可以有效的方式sql注入攻擊
此處不同於python的字符串格式化,全部使用%s占位
from pymysql import * def main(): find_name = input("請輸入物品名稱:") # 創建Connection連接 conn = connect(host='localhost',port=3306,user='root',password='mysql',database='jing_dong',charset='utf8') # 獲得Cursor對象 cs1 = conn.cursor() # # 非安全的方式 # # 輸入 " or 1=1 or " (雙引號也要輸入) # sql = 'select * from goods where name="%s"' % find_name # print("""sql===>%s<====""" % sql) # # 執行select語句,並返回受影響的行數:查詢所有數據 # count = cs1.execute(sql) # 安全的方式 # 構造參數列表 params = [find_name] # 執行select語句,並返回受影響的行數:查詢所有數據 count = cs1.execute('select * from goods where name=%s', params) # 注意: # 如果要是有多個參數,需要進行參數化 # 那么params = [數值1, 數值2....],此時sql語句中有多個%s即可 # 打印受影響的行數 print(count) # 獲取查詢的結果 # result = cs1.fetchone() result = cs1.fetchall() # 打印查詢的結果 print(result) # 關閉Cursor對象 cs1.close() # 關閉Connection對象 conn.close() if __name__ == '__main__': main()