我试图通过一次事务中的字典值将动态插入命令制作到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()
答案 0 :(得分:1)
您可能会执行类似的操作,但是对于如何优化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()