Mysql儲存之原生語句操作 pymysql

2021-09-19 20:09:28 字數 2929 閱讀 7190

mysql儲存之原生語句操作(pymysql)

關係型資料庫是基於關係模型的資料庫,而關係模型是通過二維表時實現的,於是構成了行列的表結構。

表可以看作是某個實體的集合,而實體之間存在聯絡,這個就需要通過表之間的關聯關係來體現,比如主鍵的關聯關係,多個表組成了乙個資料庫,也就是關係型資料庫。其中mysql.oracle,sql server,sqlite等都屬於關係型資料庫,這裡主要說mysql的操作。

所謂的原生語句就是mysql自帶的增刪改查的語句,即insert,delete,update,select。下面我們用python3為例。

在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,但是該函式的用法和我們的需...