lst = [{'Fruit':'Apple','HadToday':2},{'Fruit':'Banana','HadToday':8}]
我有一长串上述表格的词典 我有两个固定变量。
person = 'Sam'
date = datetime.datetime.now()
我希望将此信息插入mysql
表格。
我目前是怎么做的
for item in lst:
item['Person'] = person
item['Date'] = date
cursor.executemany("""
INSERT INTO myTable (Person,Date,Fruit,HadToday)
VALUES (%(Person)s, %(Date)s, %(Fruit)s, %(HadToday)s)""", lst)
conn.commit()
他们是一种方法,当人和日期变量不变时绕过循环。我试过了
lst = [{'Fruit':'Apple','HadToday':2},{'Fruit':'Banana','HadToday':8}]
cursor.executemany("""
INSERT INTO myTable (Person,Date,Fruit,HadToday)
VALUES (%s, %s, %(Fruit)s, %(HadToday)s)""", (person,date,lst))
conn.commit()
TypeError:格式字符串
的参数不足
答案 0 :(得分:0)
您的问题是,它尝试将lst
全部应用到%(Fruit)s
中,并且%(HadToday)s)
没有任何内容。
如果你有一个像" Tim O' Molligan"这样的名字,你就不应该通过将固定值硬编码到语句中来解决问题。 - 最好让db处理正确的格式。
不是mysql,但是你得到了要点:http://initd.org/psycopg/docs/usage.html#the-problem-with-the-query-parameters - 一周前我自己学会了; o)
可能最干净的方法是使用
cursor.execute("SET @myname = %s", (person,))
cursor.execute("SET @mydate = %s", (datetime.datetime.now(),))
并使用
cursor.executemany("""
INSERT INTO myTable (Person,Date,Fruit,HadToday)
VALUES (@myname, @mydate, %(Fruit)s, %(HadToday)s)""", lst)
我不是100%的语法,但我希望你明白这个想法。如果我有拼写错误,请评论/编辑答案。