Python3使用pymysql實現增刪改查

推薦閱讀: 帶你學習PyMySQL , Mysql 與 Pymysqlhtml

原文連接python

原生語句操做

所謂的原生語句就是mysql自帶的增刪改查的語句,即insert,delete,update,select。下面咱們用python3爲例。 在python3中數據庫的連接通常用pymsql模塊。mysql

第三方庫的安裝
pip install pymysql
複製代碼
建立數據庫的連接

前提咱們 配置好了mysql數據庫,而且安裝上了pymysql模塊。 而後咱們須要導入pymsql,看下面示例代碼:sql

conn = pymysql.connect(host='localhost', 
port=3306, user='root', 
passwd='1234', db='user', charset='utf8mb4')#聲明mysql鏈接對象
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)#查詢結果以字典的形式
cursor.execute(sql語句字符串)#執行sql語句
conn.close()#關閉連接
複製代碼
事務處理

事務機制能夠確保數據的一致性,若是咱們有個邏輯是刪除一條數據而後插入,若是咱們在插入過程當中失敗了,那麼以前刪除的數據沒有進行插入,就形成了數據的缺失,爲了不這種缺失狀況的發生,咱們使用使用來進行統一處理,若是以上操做都成功了才提交,不然回滾,就當什麼也沒發生同樣。用代碼就下面的寫法數據庫

try:
   cursor.execute(sql)
   conn.commit()
except:
   conn.rollback()
複製代碼
動態插入數據

傳入一個動態變化的字典便可。bash

好比說一開始的時候咱們有這樣的一個表叫user,須要保存三個字段id,name,age而後咱們能夠構建下面的字典和表名post

d={'id':'1001','name':'zhangsan','age':'17'}  學習

tables='user'

d={'id':'1001','name':'zhangsan','age':'17'}  
 
tables='user'
keys=','.join(d.key())
values=','.join(['%s']*len(d))
sql=f'INSERT INTO {table}({keys})VALUES({values})'
try:
   if cursor.execute(sql,tuple(d.values())):
                  print('ok')
                  conn.commit()
except:
     print('no')
     conn.rollback()
conn.close()
複製代碼

如今咱們就完成了插入操做,可是有的時候咱們須要 主鍵存在是更細,不存在時插入怎麼辦呢,首先咱們看下面語句fetch

動態更新插入數據
INSERT INTO user(id,name,age) VALUES(%s,%s,%s) ON DUPLICATE KEY UPDATE id=%s,name=%s,age=%s
ON DUPLICATE KEY UPDATE 
複製代碼

能夠達到如下目的:ui

向數據庫中插入一條記錄:

若該數據的主鍵值/ UNIQUE KEY 已經在表中存在,則執行更新操做, 即UPDATE 後面的操做。

不然插入一條新的記錄。

而後咱們對上面總體作一個代碼整理。以下

data_dic={'id':'1001','name':'zhangsan','age':'17'}  
 
tables = 'name'
keys = ','.join(data_dic.keys())
values = ','.join(['%s'] * len(data_dic))
sql =f'INSERT INTO {tables}({keys})VALUES({values}) ON DUPLICATE KEY UPDATE '
update = ','.join([f"{k}={v}" for k,v in data_dic.items()])
sql += update
try:
   if cursor.execute(sql,tuple(d.values())):
                  print('ok')
                  conn.commit()
except:
     print('no')
     conn.rollback()
conn.close()
複製代碼
查詢語句

查詢語句就比較簡單了用select。下面直接看代碼

sql='select * from user limit 1,10'
cursor.excute(sql)
one=cursor.fetchone()
while one:
   one=cursor.fetchone()  
#推薦使用while循環配合fetchone讀取全部數據,隨用隨取,效率高。
複製代碼
刪除語句

刪除語句用delete語句,可是隻要commit裏以後才能生效。

tale='user'
id='id=123'#能夠直接把條件做爲字符串傳過來。
sql=f'delete from {table} where {id}'
try:
    cursor.execute(sql)
    conn.commit()
except:
    conn.rollback()
conn.close()
複製代碼
相關文章
相關標籤/搜索