Python 2.7 - вставка нескольких значений в MySql в одном исполнении из значений словарного ключа - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь создать динамическую команду вставки в mysql из словарных значений в одной транзакции, но получаю ошибку. Также мне было интересно, каков наиболее эффективный способ выполнения этого конкретного случая (возможно, мой код не оптимален)? Я использую FOR, так как в некоторых случаях словарь может быть пустым. Спасибо

    import mysql.connector
    mydb = mysql.connector.connect(..........
    mycursor = mydb.cursor()
    varStatic="test"
    cust={'74.2': '54', '172.26': '76', '7': 'B9'}
    insertStatement='"""INSERT INTO customers (id,number,desc) VALUES (%s,%s,%s)"""'
    for key in cust:
          insertStatement+=',('+key+','+cust[key]+','+varStatic+')'
    mycursor.execute(insertStatement)
    mydb.commit()

1 Ответ

0 голосов
/ 20 ноября 2018

Вы можете сделать что-то подобное, но немного запутались в том, как оптимизировать for-loop и value. Если я могу избавиться от append или заменить на List Comprehensions, тогда вы можете использовать insertStatement += ("(%s,%s,%s),"*len(cust.items()))[:-1]

import mysql.connector
mydb = mysql.connector.connect(user="k",passwd="k",db="k")
mycursor = mydb.cursor()
varStatic="test"
cust={'74.2': "54'", '172.26': '76', '7': 'B9'}
insertStatement= """INSERT INTO customers (id,number,desc) VALUES """
value = []
for k,v in cust.items():
    insertStatement += "(%s,%s,%s),"
    value.append(k)
    value.append(v)
    value.append(varStatic)

print(insertStatement[:-1],value)
try:
    mycursor.execute(insertStatement[:-1],value)
    mydb.commit()
except Exception as e:
    print(e)
    mydb.rollback()
...