Cha*_*Kut 0 python postgresql psycopg2 python-db-api
根据psycopg2:使用一个查询插入多行,使用psycopg2的execute而不是executemany更有效.别人可以证实吗?
上面的StackOverflow问题建议使用mogrify来创建排序语句:
INSERT INTO table VALUES (value1, value2), (value3, value4)
Run Code Online (Sandbox Code Playgroud)
是否可以使用常规执行函数生成这样的语句?我想到了一些形式
cursor.execute("""INSERT INTO table VALUES (%s, %s), (%s, %s)""", ((value1,value2),(value3,value4)))
Run Code Online (Sandbox Code Playgroud)
会工作.
更新:
例如,我尝试传入执行sql语句:
insert into history (timestamp) values (%s),(%s);
Run Code Online (Sandbox Code Playgroud)
与下面的元组:
(('2014-04-27 14:07:30.000000',), ('2014-04-27 14:07:35.000000',))
Run Code Online (Sandbox Code Playgroud)
但我得到的只是错误:
没有结果要取
要使用execute方法,请将要插入的数据放入列表中.psycopg2将一个列表调整为一个数组.然后你不需要数组并根据需要转换值
import psycopg2
insert = """
insert into history ("timestamp")
select value
from unnest(%s) s(value timestamp)
returning *
;"""
data = [('2014-04-27 14:07:30.000000',), ('2014-04-27 14:07:35.000000',)]
conn = psycopg2.connect("host=localhost4 port=5432 dbname=cpn")
cursor = conn.cursor()
cursor.execute(insert, (data,))
print cursor.fetchall()
conn.commit()
conn.close()
Run Code Online (Sandbox Code Playgroud)
不确定executemany的性能差异是否显着.但我认为以上是整洁的.returning顾名思义,该子句将返回插入的元组.
BTW timestamp是保留字,不应用作列名.
| 归档时间: |
|
| 查看次数: |
6224 次 |
| 最近记录: |