pymysql操作mysql数据库
一、pymysql操作mysql數(shù)據(jù)庫
-
安裝pymysql
pip install pymysql
1.1 pymysql操作數(shù)據(jù)庫的五行拳
連接數(shù)據(jù)庫
使用Connect方法連接數(shù)據(jù)庫
pymysql.Connections.Connection(host=None, user=None, password='', database=None, port=0, charset='') 參數(shù)說明:host – 數(shù)據(jù)庫服務(wù)器所在的主機(jī)。user – 登錄用戶名。password – 登錄用戶密碼。database – 連接的數(shù)據(jù)庫。port – 數(shù)據(jù)庫開放的端口。(默認(rèn): 3306)charset – 連接字符集。 返回值:返回連接對象例子: link = pymysql.Connect(host='localhost', port=3306, user='root', password='123456', db='zzl', charset='utf8') ?-
連接對象方法
| begin() | 開啟事務(wù) |
| commit() | 提交事務(wù) |
| cursor(cursor=None) | 創(chuàng)建一個(gè)游標(biāo)用來執(zhí)行sql語句 |
| rollback() | 回滾事務(wù) |
| close() | 關(guān)閉連接 |
| select_db(db) | 選擇數(shù)據(jù)庫 |
| set_charset(charset) | 設(shè)置字符集 |
創(chuàng)建游標(biāo)
cursor = link.cursor() ? cursor=pymysql.Cursors.DictCursor() #[{}] print(cursor.rowcount) #打印受影響行數(shù)| close() | 關(guān)閉游標(biāo) |
| execute(query, args=None) | 執(zhí)行單條語句,傳入需要執(zhí)行的語句,是string類型;同時(shí)可以給查詢傳入?yún)?shù),參數(shù)可以是tuple、list或dict。執(zhí)行完成后,會返回執(zhí)行語句的影響行數(shù)。 |
| fetchone() | 取一條數(shù)據(jù) |
| fetchmany(n) | 取多條數(shù)據(jù) |
| fetchall() | 取所有數(shù)據(jù) |
| _executed屬性 | 正在執(zhí)行的sql語句 |
執(zhí)行sql語句
# 執(zhí)行sql語句 sql = 'select * from user1' # 執(zhí)行完sql語句,返回受影響的行數(shù) num = cursor.execute(sql)獲取結(jié)果集
result1 = cursor.fetchone() print(result1)關(guān)閉連接
cursor.close() link.close()1.2 pymysql中事務(wù)處理
pymysql默認(rèn)是沒有開啟自動(dòng)提交事務(wù),所以我們?nèi)绻M(jìn)行增、刪、改,就必須手動(dòng)提交或回滾事務(wù)。
sql = 'delete from user where id=%s' % user_id ? # 如果要執(zhí)行增刪改語句的時(shí)候,下面的就是固定格式 try:cursor.execute(sql)# 如果全部執(zhí)行成功,提交事務(wù)link.commit()print(cursor.lastrowid) #獲取最后插入記錄的自增id號 except Exception as e:print(e)link.rollback() ?1.3 防sql注入
-
pymysql.escape_string(str) 轉(zhuǎn)移字符串中特殊字符(‘,“等)
-
cursor.execute(sql,參數(shù)),參數(shù)化,不要直接拼接sql字符串
二、封裝數(shù)據(jù)庫操作類
2.1.數(shù)據(jù)庫操作類的封裝
-
一個(gè)數(shù)據(jù)庫model類對應(yīng)一個(gè)表
-
數(shù)據(jù)庫model類的核心是連貫操作和方法的無順序調(diào)用
db.where('username="admin"').table('blog_user').field('username,password').select() # select usenrame,password from blog_user where username='admin' # sql = "SELECT {fields} FROM {table} {where} {groupby} {having} {orderby} {limit}".format()
2.2 連貫操作
方法要返回self
2.3 方法的無順序調(diào)用
-
在進(jìn)行數(shù)據(jù)庫查詢時(shí),不用考慮方法的先后順序。
-
核心思想
-
無論怎么調(diào)用,最終生成sql語句。
-
每調(diào)用一個(gè)方法,就生成對應(yīng)sql子句
-
涉及到的技術(shù)點(diǎn):字符串拼接
-
每次調(diào)用的最后必定是select、insert、update、delete,這些方法不返回self
-
2.4 字段緩存
-
在查詢語句中盡量不要出現(xiàn)*,我們可以將表的字段緩存的文件中,實(shí)例化數(shù)據(jù)庫model類時(shí),加載緩存字段,如果不指定字段就使用緩存字段
-
也可以通過緩存字段過濾增刪改時(shí)無效的字段
三、分頁類
分頁是通過解析url中page參數(shù)(可以自己指定),結(jié)合sql語句中l(wèi)imit子句,從數(shù)據(jù)庫中查詢每個(gè)頁面所需數(shù)據(jù),具體可以分為以下步驟:
-
1) 獲取總記錄數(shù)
-
2)獲取每頁顯示的記錄個(gè)數(shù)
-
3)計(jì)算總頁數(shù):總記錄數(shù)/每頁記錄個(gè)數(shù),然后上取整
-
4)解析url獲取當(dāng)前頁數(shù)
-
5)計(jì)算limit子句所需的偏移量: limit (當(dāng)前頁數(shù)-1)*每頁記錄個(gè)數(shù),每頁記錄個(gè)數(shù)
總結(jié)
以上是生活随笔為你收集整理的pymysql操作mysql数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 导入离线地图_PyQGIS
- 下一篇: 记录一次线上mysql事务隔离级别引发的