推薦閱讀: 帶你學習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()
複製代碼