psycopg2 executemany简单列表?

时间:2013-10-03 08:26:44

标签: python psycopg2 executemany

我正在尝试使用psycopg2 executemany进行简单的多插入,但我只能使用dict而不是“普通”值序列来使其工作:

# given:
values = [1, 2, 3] ; cursor = conn.cursor()

# this raises TypeError: 'int' object does not support indexing:
cursor.executemany('INSERT INTO t (col_a) VALUES ( %s )', values)
# I also tried encapsulating my 'values' into a tuple/list but it gives another exception (TypeError: not all arguments converted during string formatting).

# while this is ok:
cursor.executemany('INSERT INTO t (col_a) VALUES ( %(value)s )', [  dict(value=v) for v in values ])

是不是可以在不使用“named”参数(%(value)s)的情况下给出“简单”列表/元组值?

2 个答案:

答案 0 :(得分:4)

executemany需要一系列序列,例如。列表清单:

[[v] for v in values]

答案 1 :(得分:3)

executemany()获取参数列表,每个参数应该是与execute()一起使用的对象,即tupledict,但不是简单的值如数字或字符串。这就是第二个版本没问题的原因:你正在生成多个dict。你也可以写:

values = [(1,), (2,), (3,)]

其中列表的每个元素都是tuple