在表中插入字典和变量的列表

rlcwz9us  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(316)
lst = [{'Fruit':'Apple','HadToday':2},{'Fruit':'Banana','HadToday':8}]

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

person = 'Sam'
date = datetime.datetime.now()

我想把这个信息插入一个表格 mysql table。
我现在是怎么做的

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()

是一种方法,它绕过了循环,因为person和date变量是常量。我试过了

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

mutmk8jj

mutmk8jj1#

你的问题是,它试图应用所有 lst 进入 %(Fruit)s 什么也没有留下 %(HadToday)s) .
如果你有一个像“tim o'molligan”这样的名字,你不应该通过将固定值硬编码到语句中来解决问题,最好让db处理正确的格式。
不是mysql,但你知道要点:http://initd.org/psycopg/docs/usage.html#the-查询参数的问题——一周前我自己学的;(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)

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

相关问题