背景
在python利用pymysql執行sql語句時,由於沒用的orm模型,只能手寫sql,這麼做有亮點不方便:
- 1、參數個數變化時,sql語句就要有很大的調整,很不方便。
- 2、在爬蟲中,我們插入的往往是一個對象,把對象解析出來再拼接sql語句很麻煩。
今天我們來學習一種動態sql的寫法,也可以說是通用型sql的寫法,當然這個寫法是我在看崔慶才大神的博客中學到的,參考鏈接:
特別感謝!
實例
insert
在執行插入語句時,我們可以動態解析要插入的對象,解析出來的字段名、字段數和字段值之後就可以動態構造一個sql。
data = {
'id': '20120001',
'name': 'Bob',
'age': 20
}
table = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))
sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)
cur.execute(sql, tuple(data.values()))
update
data = {
'id': '20120001',
'name': 'Bob',
'age': 21
}
table = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))
sql = 'INSERT INTO {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE'.format(table=table, keys=keys, values=values)
update = ','.join([" {key} = %s".format(key=key) for key in data])
sql += update