一、pymysql操作mysql數據庫
-
安裝pymysql
pip install pymysql
1.1 pymysql操作數據庫的五行拳
-
連接數據庫
使用Connect方法連接數據庫
pymysql.Connections.Connection(host=None, user=None, password='', database=None, port=0, charset='') 參數說明:host – 數據庫服務器所在的主機。user – 登錄用戶名。password – 登錄用戶密碼。database – 連接的數據庫。port – 數據庫開放的端口。(默認: 3306)charset – 連接字符集。 返回值:返回連接對象例子: link = pymysql.Connect(host='localhost', port=3306, user='root', password='123456', db='zzl', charset='utf8') ?
-
連接對象方法
方法 說明 begin() 開啟事務 commit() 提交事務 cursor(cursor=None) 創建一個游標用來執行sql語句 rollback() 回滾事務 close() 關閉連接 select_db(db) 選擇數據庫 set_charset(charset) 設置字符集 -
-
創建游標
cursor = link.cursor() ? cursor=pymysql.Cursors.DictCursor() #[{}] print(cursor.rowcount) #打印受影響行數
方法 說明 close() 關閉游標 execute(query, args=None) 執行單條語句,傳入需要執行的語句,是string類型;同時可以給查詢傳入參數,參數可以是tuple、list或dict。執行完成后,會返回執行語句的影響行數。 fetchone() 取一條數據 fetchmany(n) 取多條數據 fetchall() 取所有數據 _executed屬性 正在執行的sql語句 -
執行sql語句
# 執行sql語句 sql = 'select * from user1' # 執行完sql語句,返回受影響的行數 num = cursor.execute(sql)
-
獲取結果集
result1 = cursor.fetchone() print(result1)
-
關閉連接
cursor.close() link.close()
1.2 pymysql中事務處理
pymysql默認是沒有開啟自動提交事務,所以我們如果進行增、刪、改,就必須手動提交或回滾事務。
sql = 'delete from user where id=%s' % user_id ? # 如果要執行增刪改語句的時候,下面的就是固定格式 try:cursor.execute(sql)# 如果全部執行成功,提交事務link.commit()print(cursor.lastrowid) #獲取最后插入記錄的自增id號 except Exception as e:print(e)link.rollback() ?
1.3 防sql注入
-
pymysql.escape_string(str) 轉移字符串中特殊字符(‘,“等)
-
cursor.execute(sql,參數),參數化,不要直接拼接sql字符串
二、封裝數據庫操作類
2.1.數據庫操作類的封裝
-
一個數據庫model類對應一個表
-
數據庫model類的核心是連貫操作和方法的無順序調用
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 方法的無順序調用
-
在進行數據庫查詢時,不用考慮方法的先后順序。
-
核心思想
-
無論怎么調用,最終生成sql語句。
-
每調用一個方法,就生成對應sql子句
-
涉及到的技術點:字符串拼接
-
每次調用的最后必定是select、insert、update、delete,這些方法不返回self
-
2.4 字段緩存
-
在查詢語句中盡量不要出現*,我們可以將表的字段緩存的文件中,實例化數據庫model類時,加載緩存字段,如果不指定字段就使用緩存字段
-
也可以通過緩存字段過濾增刪改時無效的字段
三、分頁類
分頁是通過解析url中page參數(可以自己指定),結合sql語句中limit子句,從數據庫中查詢每個頁面所需數據,具體可以分為以下步驟:
-
1) 獲取總記錄數
-
2)獲取每頁顯示的記錄個數
-
3)計算總頁數:總記錄數/每頁記錄個數,然后上取整
-
4)解析url獲取當前頁數
-
5)計算limit子句所需的偏移量: limit (當前頁數-1)*每頁記錄個數,每頁記錄個數