Python中pymysql通過字典插入數據

引子:

今天面試,被大佬要求寫一段實操代碼,首先他在寫字板上開頭:

def insert(table,data):
    #這裏你知道table和data,其中data是一個字典,寫插入數據庫的代碼

想了一下,想到的一些方法被否定了,後來被允許查資料後找到方法一(參考:http://www.bubuko.com/infodetail-2788655.htmlhttps://www.cnblogs.com/zengsf/p/9734476.html):

import pymysql
def insert(table,data):
    #這裏你知道table和data,其中data是一個字典,寫插入數據庫的代碼
    data = {'age': '123', 'name': 'happy'}
    table = 'users'
    # 獲取到一個以鍵且爲逗號分隔的字符串,返回一個字符串
    keys = ','.join(data.keys())
    values = ','.join(['%s'] *len(data))
    sql = 'INSERT INTO {table}({keys}) VALUES({values})'.format(table=table, keys=keys, values=values)
    # 這裏的第二個參數傳入的要是一個元組
    if cursor.execute(sql, tuple(data.values())):
        print('users')
        db.commit()
db =  pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', db='test')
cursor = db.cursor()
insert("1","2")

勉強算過,不過按大佬的說法 cursor.execute()這裏可以直接用字典爲參數,面試結束後又查了一下資料(https://www.cnblogs.com/zengsf/p/9734476.html)知道可以將res_sql轉換後可以把字典當做參數,而且可以用cursor.executemany()進行批量插入,代碼如下:

import pymysql
def insert2(table,data):
    #這裏你知道table和data,其中data是一個字典,寫插入數據庫的代碼
    data = {"name": 'happy222222', 'age': '123'}
    cols = ", ".join('`{}`'.format(k) for k in data.keys())
    print(cols)  # '`name`, `age`'

    val_cols = ', '.join('%({})s'.format(k) for k in data.keys())
    print(val_cols)  # '%(name)s, %(age)s'

    sql = "insert into users(%s) values(%s)"
    res_sql = sql % (cols, val_cols)
    print(res_sql)  # 'insert into users(`name`, `age`) values(%(name)s, %(age)s)'

    cursor.execute(res_sql, data)  # 將字典data傳入
    db.commit()

    a = [{'age': '123', 'name': 'fake'}, {'age': 456, 'name': 'gigi'}, {'age': 23, 'name': 'qq'}]  # 拼出要插入的內容
    cursor.executemany(res_sql, a)# 將字典列表a傳入
    db.commit()
db =  pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', db='test')
cursor = db.cursor()
insert2("1","2")

這樣寫法確實非常簡潔,而且爲接口的編寫也帶來了輕便、省事,不知道多進程/線程時運行效率的提升如何,以後有機會再測試吧

 

技術研究。侵告刪

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章