【发布时间】:2016-10-05 00:55:56
【问题描述】:
我正在尝试使用 psycopg2 从 python 列表中向表中插入一行,但字符串格式出现问题。
该表有 4 列类型(1043-varchar、1114-timestamp、1043-varchar、23-int4)。我也尝试过用 1082-date 代替时间戳,用 21-int2 代替 int4。
以下语句在 pgAdmin 中或通过不带字符串格式的 psycopg2 游标执行正常工作:
INSERT INTO ssurgo.distmd VALUES ('5', '2015-01-01', 'Successful', 4891);
但是,如果我这样做:
sql_text = "INSERT INTO ssurgo.distmd VALUES %s ;"
data = ['5', '2015-01-01', 'Successful', 4891]
data[1] = date.today() # ensure psycopg2 recognizes a date using datetime
print(curs.mogrify(sql_text, data))
我明白了:
TypeError: not all arguments converted during string formatting
如果我将日期保留为“2015-01-01”字符串而不是 datetime.date 对象,并且如果我使用 curs.execute(sql_text, data) 而不是 mogrify,我会得到同样的错误。
我正在传递一个列表,所以我认为这与我在其他问题中发现的创建非字符串序列所必需的更常见的单元组错误无关,并且显式转换为元组没有修复错误。
有人知道为什么 psycopg2 字符串格式会出错吗?
【问题讨论】:
-
四个值只有一个值占位符。
标签: python postgresql python-2.7 psycopg2