MySQL 笔记9 -- PyMySQL
生活随笔
收集整理的這篇文章主要介紹了
MySQL 笔记9 -- PyMySQL
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
MySQL 筆記9 – PyMySQL
MySQL 系列筆記是筆者學習、實踐MySQL數據庫的筆記
參考文檔:
MySQL 官方文檔
SQL 教程
PyMySQL官方文檔
一、基礎
1、簡介
- PyMySQL 是 Python 連接 MySQL 的驅動程序庫
- 采用純Python編寫,運行效率相對較低,但可以和Python無縫連接
2、安裝及導入
安裝:
pip install PyMySQL導入:
import pymysql二、使用
1、PyMySQL 庫
- 原理:PyMySQL 連接MySQL,然后把用SQL語言編寫的操作數據庫指令傳遞給MySQL,最后 MySQL 把結果返回供 PyMySQL 讀取
- PyMySQL 庫只有兩個類:連接類(Connection)、游標類(Cursor)
- Connection:連接 MySQL
- Cursor:與 MySQL 進行交互,傳送指令,讀取結果
2、連接對象(Connection Objects)
獲取連接對象:
pymysql.connect(host=None, user=None, password='', database=None, port=0)參數:
- host:MySQL的主機IP地址,本機可使用 ‘localhost’ / 127.0.0.1
- user:登入用戶名,MySQL 初始只有 ‘root’ 管理員用戶
- password:登入密碼
- database:連接的數據庫名
- port:端口號,默認 3306
- 還有很多可選參數,具體可查看官方文檔
屬性和方法:
| .autocommit_mode | 提交模式,默認為None 不自動提交 |
| .open | 是否已連接,是返回 True,反之 |
| .begin() | 開始事務(transaction) |
| .commit() | 提交事務 |
| .close() | 關閉數據庫連接 |
| .cursor(cursor=None) | 創建游標對象 |
| .ping(reconnect=True) | 重新連接 |
| .rollback() | 事務回滾 |
| .select_db(db) | 選擇數據庫,db:數據庫名稱 |
| .show_warnings() | 發送’SHOW WARNINGS’ 的 SQL 命令 |
- 每一次 .commit() 之前的所有SQL命令形成一個事務
- .commit() 之后默認開啟事務
3、游標對象(Cursor Objects)
獲取游標對象:
pymysql.connect(...).cursor()屬性和方法:
| .execute(query, args=None) | 執行命令,query:SQL命令str類型,args:額外參數,tuple、list or dict |
| .close() | 釋放cursor對象 |
| .executemany(query, args) | 執行多條命令,返回 Number of rows affected |
| .fetchall() | 獲取所有行 |
| .fetchmany(size=None) | 獲取size行 |
| fetchone() | 獲取一行 |
- execute() 中,如果 args 是 list/tuple,用 %s 傳入query ;如果是dict,用%(name)s
4、異常
| Warning | 當有嚴重警告時觸發,例如插入數據是被截斷等等。必須是 StandardError 的子類。 |
| Error | 警告以外所有其他錯誤類。必須是 StandardError 的子類。 |
| InterfaceError | 當有數據庫接口模塊本身的錯誤(而不是數據庫的錯誤)發生時觸發。 必須是Error的子類。 |
| DatabaseError | 和數據庫有關的錯誤發生時觸發。 必須是Error的子類。 |
| DataError | 當有數據處理時的錯誤發生時觸發,例如:除零錯誤,數據超范圍等等。 必須是DatabaseError的子類。 |
| OperationalError | 指非用戶控制的,而是操作數據庫時發生的錯誤。例如:連接意外斷開、 數據庫名未找到、事務處理失敗、內存分配錯誤等等操作數據庫是發生的錯誤。 必須是DatabaseError的子類。 |
| IntegrityError | 完整性相關的錯誤,例如外鍵檢查失敗等。必須是DatabaseError子類。 |
| InternalError | 數據庫的內部錯誤,例如游標(cursor)失效了、事務同步失敗等等。 必須是DatabaseError子類。 |
| ProgrammingError | 程序錯誤,例如數據表(table)沒找到或已存在、SQL語句語法錯誤、 參數數量錯誤等等。必須是DatabaseError的子類。 |
| NotSupportedError | 不支持錯誤,指使用了數據庫不支持的函數或API等。例如在連接對象上 使用.rollback()函數,然而數據庫并不支持事務或者事務已關閉。 必須是DatabaseError的子類。 |
三、實例
import pymysql# 連接數據庫 connection = pymysql.connect(host='localhost',user='root',password='1234',db='test',charset='utf8')try:# 獲取cursor,with語句結束后cursor自動close()with connection.cursor() as cursor:# 插入一行sql = "INSERT INTO info(email, password) VALUES(%s, %s)"cursor.execute(sql, ('123@qq.com', 'secret'))# 提交事務connection.commit()with connection.cursor() as cursor:# 讀取記錄sql = "SELECT id,password FROM info WHERE email=%s"cursor.execute(sql, ('123@qq.com',))result = cursor.fetchone()print(result)except Exception as e:# 發生錯誤時回滾print(e)connection.rollback() finally:# 關閉連接connection.close()
GOOD LUCK!
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的MySQL 笔记9 -- PyMySQL的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java番外篇3——线程池
- 下一篇: MongoDB出错:ERROR: chi