Python 将字典和变量列表插入表中

Python 将字典和变量列表插入表中,python,mysql,python-2.7,pymysql,Python,Mysql,Python 2.7,Pymysql,我有一长串上述形式的词典。 我有两个固定变量 lst = [{'Fruit':'Apple','HadToday':2},{'Fruit':'Banana','HadToday':8}] 我希望将此信息插入到mysql表中 我现在是怎么做的 person = 'Sam' date = datetime.datetime.now() 这是一种绕过循环的方法,因为person和date变量是常量。我试过了 for item in lst: item['Person'] = person

我有一长串上述形式的词典。
我有两个固定变量

lst = [{'Fruit':'Apple','HadToday':2},{'Fruit':'Banana','HadToday':8}]
我希望将此信息插入到
mysql
表中

我现在是怎么做的

person = 'Sam'
date = datetime.datetime.now()
这是一种绕过循环的方法,因为person和date变量是常量。我试过了

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()
TypeError:格式字符串的参数不足


这里的问题是,它试图将所有的
lst
应用到
%(水果)s
中,而
%(hadtoway)s)没有留下任何内容

如果您有“Tim O'Molligan”这样的名称,则不应通过将固定值硬编码到语句中来解决问题,最好让db处理正确的格式

不是mysql,但你明白了要点:-一周前我自己就学会了这一点;o)

可能最干净的方法是使用

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()
和使用

cursor.execute("SET @myname = %s", (person,))
cursor.execute("SET @mydate = %s", (datetime.datetime.now(),)) 

我对语法不是百分之百的了解,但我希望你能理解。如果有拼写错误,请注释/编辑答案。

当检测到INSERT语句时,executemany会创建多行INSERT语句,并将每个子列表映射到一个值项。这要求每个插入的列有一个值。您可以简单地更新列表或实现自己的格式化功能,以处理类似于
cursor.executemany("""
    INSERT INTO myTable (Person,Date,Fruit,HadToday)
    VALUES (@myname, @mydate, %(Fruit)s, %(HadToday)s)""", lst)