Python2.7-从字典键值一次在MySql中插入多个值

Python2.7-从字典键值一次在MySql中插入多个值,python,mysql,python-2.7,dictionary,insert,Python,Mysql,Python 2.7,Dictionary,Insert,我试图将dynamicinsert命令从一个事务中的字典值生成到mysql中,但得到了一个错误。我还想知道执行这个特定案例最有效的方法是什么(也许我的代码不是最优的)?我使用FOR,因为在某些情况下,字典可能是空的。谢谢 import mysql.connector mydb = mysql.connector.connect(.......... mycursor = mydb.cursor() varStatic="test" cust={'74.2'

我试图将dynamicinsert命令从一个事务中的字典值生成到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()

您可能会这样做,但对于如何优化
for loop
value
有些困惑。如果我可以去掉
追加
或替换为
列表理解
,那么您可以使用
插入语句+=(“(%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()

您得到了什么错误?mysql.connector.errors.ProgrammingError:1064(42000):您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以了解在“替换为客户(id、编号、描述)值(%s、%s、%s)”附近使用的正确语法,(74.2,54'在第1行,事实上,我不太确定哪里出了问题,但同时我觉得我的代码是基于最佳实践的。这看起来确实像是语法错误。也许你可以添加一个调试打印语句,比如
print insertStatement
,并用输出更新你的问题。你使用
,因此<代码>“”“
以字符串结尾。我想这可能是因为KEY、VALUE、VARSTATIC的值根本没有被引用。这是字典中两个元素的输出示例。有些内容定义不正确。这是我从Print语句得到的结果。插入到客户(id、number、desc)值(%s,%s),(%s,%s,%s)['172.26.74.2111','54.10.EC.0C.1D.6B','test','172.26.74.112232','54.10.EC.54.92.FD','test']print(insertStatement[:-1])返回插入到客户(id,number,desc)值(%s,%s),(%s,%s)这真的不正确。你应该阅读这篇文章,不建议直接执行sql,因为这会导致injection@DejanI不太明白你想说什么?你建议一个接一个地插入吗?你打印的insert语句返回的格式非常奇怪,不正确。你能纠正它吗?因为答案肯定是否定的t OK?print(insertStatement[:-1])返回INSERT INTO customers(id、数字、描述)值(%s,%s),(%s,%s)。
mycursor.execute()
将通过
['172.26.74.2111','54.10.EC.0C.1D.6B','test 172.26.74.112232','54.10.EC.54.92.FD test']
插入客户(id、数字、描述)值(%s、%s),(%s、%s、%s)
。如果您不关心数据类型,函数将自动转换。当然,您也可以执行自己的sql,但需要手动处理数据以避免sql注入。顺便说一句,我不会发布我从未运行过的代码,尤其是完整的代码。@Dejande