PyMysql 是一個 純Python 的Mysql客戶端庫,大多數的公共API都兼容mysqlclient 和 mysqldb.
# 1. 連接 conn = pymysql.connect( user = 'root', # 用戶名 password = '111111', # 用戶密碼 db = 'aaa', # 連接的數據庫 charset = 'gbk', # 設置字符編碼 cursorclass=pymysql.cursors.DictCursor # 設置游標類型,已返回不同類型數據 ) # 👆 只是完成了連接 # 2. 創建游標 cursor = conn.cursor() # 👆 相當用創建了數據庫操縱對象,獲取數據的工具 # 3. 執行sql語句 cursor.execute('select * from student') # 返回了3條數據 # 4. 獲取數據 result = cursor.fetchall() print(result) # 默認返回嵌套的元組,元組里的每一個元組是一行數據,未設置cursorclass的情況下 # 如果設置cursorclass=pl.cursors.DictCursor,返回的是一個字典列表,每個字典就是一行數據 # 5. 執行完畢之后關閉游標 cursor.close() # 6. 關閉連接 conn.close()
第二種方式 :
# 1. 連接 conn = pymysql.connect( user = 'root', # 用戶名 password = '111111', # 用戶密碼 db = 'aaa', # 連接的數據庫 charset = 'gbk', # 設置字符編碼 cursorclass=pymysql.cursors.DictCursor # 設置游標類型,已返回不同類型數據 ) with conn.cursor() as cursor: sql = 'select * from student where stuAge >%s and stuAge<%s' cursor.execute(sql,(1,22)) # 拼接參數傳給execute 方法 ,避免sql注入 res = cursor.fetchone() # 獲取查詢到的第1條數據 res2 = cursor.fetchmany(2) # 獲取已取數據的后面3條數據 res_all = cursor.fetchall() # 獲取查詢剩下的所有數據 print(res_all) conn.close()
相比較為省略emmm 簡單的一些是這樣的..
conn = pymysql.connect( user = 'root', # 用戶名 password = '111111', # 用戶密碼 db = 'aaa', # 連接的數據庫 charset = 'gbk', # 設置字符編碼 cursorclass=pymysql.cursors.DictCursor # 設置游標類型,已返回不同類型數據 ) with conn as cursor: sql = 'select * from student where stuAge >%s and stuAge<%s' cursor.execute(sql,(1,22)) #數據的獲取 print(cursor.fetchmany(3)) # fetch one 返回一條數據 fetchmany 自定義N條數據 fetchall 所以數據 conn.close()
使用PyMysql 進行 增 , 刪 , 改 操作:
import pymysql.cursors # 配置數據庫連接信息 db ={ 'user':'root', 'password':'111111', 'db':'aaa', 'charset':'gbk', } # 連接數據庫 conn = pymysql.connect(**db)
# pymysql 增 , 刪 改 默認啟動事務 try: with conn.cursor() as cursor: # 構造sql 語句 sql1 = 'insert into grade(gid , gName) values(77 , "軟件三班")' sql2 = 'insert into grade(gid , gName) values(78 , "軟件三班")' # 執行sql 語句 cursor.execute(sql1) cursor.execute(sql2) # 提交事務 conn.commit() except Exception as e: print(e) conn.rollback() finally: conn.close()
# 數據庫 修改 : import random try: with conn as cursor: sql = 'select stuId from student' cursor.execute(sql) ids = cursor.fetchall() print(ids) sqls = 'update student set stuAge = %s where stuId = %s' for item in ids: cursor.execute(sqls,(random.randint(10,36),item['id'])) # ids返回的是字典key:value 所以取值用item['id'] conn.commit() except Exception as e: print(e) conn.rollback() finally: conn.close()
注意 :
1. pymysql 中執行的 sq| 語句不需要加;
2. execute 執行完查詢后不直接返回結果,需要主動調用方法獲取
3.要釋放資源,關閉游示與連接 # cursor , conn
4.事務的回滾與提交 # rollback , commit
