【发布时间】:2017-06-19 08:31:53
【问题描述】:
我正在尝试使用 cursor.mogrify 使用 psycopg2: insert multiple rows with one query 将大量行插入到 postgres 中
data 是一个元组列表,其中每个元组是需要插入的一行。
cursor = conn.cursor()
args_str = ','.join(cursor.mogrify("(%s,%s,%s,%s,%s,%s,%s,%s)", x) for x in data)
cursor.execute(
"insert into table1 (n, p, r, c, date, p1, a, id) values " + args_str)`
但出现错误:
TypeError: sequence item 0: expected str instance, bytes found
在线:
args_str = ','.join(cursor.mogrify("(%s,%s,%s,%s,%s,%s,%s,%s)", x) for x in data)
如果我尝试更改为 b''.join(cursor.mogrify("(%s,%s,%s,%s,%s,%s,%s,%s)", x) for x in data) , 然后执行查询给出插入字节的错误....
我做错了吗?
【问题讨论】:
-
插入大量行可能对使用复制有用。
-
@RomanTkachuk 同意你的观点,COPY 比这快很多倍。但有时写入文件不是一种选择,即使有时将文件复制到服务器也不是。
-
您可以从标准输入复制。无需写入文件。
标签: python postgresql psycopg2