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

时间:2018-05-17 04:56:17

标签: python mysql python-2.7 pymysql

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:格式字符串

的参数不足

1 个答案:

答案 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%的语法,但我希望你明白这个想法。如果我有拼写错误,请评论/编辑答案。