mysql儲存之原生語句操作(pymysql)
關係型資料庫是基於關係模型的資料庫,而關係模型是通過二維表時實現的,於是構成了行列的表結構。所謂的原生語句就是mysql自帶的增刪改查的語句,即insert,delete,update,select。下面我們用python3為例。表可以看作是某個實體的集合,而實體之間存在聯絡,這個就需要通過表之間的關聯關係來體現,比如主鍵的關聯關係,多個表組成了乙個資料庫,也就是關係型資料庫。其中mysql.oracle,sql server,sqlite等都屬於關係型資料庫,這裡主要說mysql的操作。
在python3中資料庫的鏈結一般用pymsql模組。
第三方庫的安裝
pip install pymysql
建立資料庫的鏈結前提我們 配置好了mysql資料庫,並且安裝上了pymysql模組。
然後我們需要匯入pymsql,看下面示例**:
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()
動態插入資料傳入乙個動態變化的字典即可。
比如說一開始的時候我們有這樣的乙個表叫user,需要儲存三個欄位id,name,age然後我們可以構建下面的字典和表名
d=
tables='user'
d=
tables='user'
keys=','.join(d.key())
values=','.join(['%s']*len(d))
sql=f'insert into ()values()'
try:
if cursor.execute(sql,tuple(d.values())):
print('ok')
conn.commit()
except:
print('no')
conn.rollback()
conn.close()
現在我們就完成了插入操作,但是有的時候我們需要 主鍵存在是更細,不存在時插入怎麼辦呢,首先我們看下面語句
動態更新插入資料
insert
into
user(id,name,age) values(%s,%s,%s) on
duplicate
keyupdate
id=%s,name=%s,age=%s
onduplicate
keyupdate
可以達到以下目的:
向資料庫中插入一條記錄:
若該資料的主鍵值/ unique key 已經在表中存在,則執行更新操作, 即update 後面的操作。
否則插入一條新的記錄。
然後我們對上面整體做乙個**整理。如下
d=
tables = 'name'
keys = ','.join(data_dic.keys())
values = ','.join(['%s'] * len(data_dic))
sql =f'insert into ()values() on duplicate key update '
update = ','.join([f"="
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 where '
try:
cursor.execute(sql)
conn.commit()
except:
conn.rollback()
conn.close()
mysql 原生操作
之前一直用框架導致對mysql 的原生 sql操作已慢慢忘記 今天覆習後記錄一下以後忘記可以直接來這裡看 查詢 select coalesce name,沒有名字 from user where date format form unixtime create time y m d date for...
mysql原生操作
後端開發中,最常用的關係型資料庫可能就是mysql了,在linux環境或本地開發環境中,不使用第三方軟體時,可直接登入到mysql檢視資料表等資訊,也可以進行sql的調優,測試等。linux中,可使用ps ef grep mysql檢視mysql的安裝位址,之後c d至對應mysql安裝目錄下的bi...
mysql原生分頁語句 mysql原生分頁
select from table limit pageno 1 pagesize,pagesize 一 分頁需求 客戶端通過傳遞start 頁碼 limit 每頁顯示的條數 兩個引數去分頁查詢資料庫表中的資料,那我們知道mysql資料庫提供了分頁的函式limit m,n,但是該函式的用法和我們的需...