Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以将psychopg2用于准备好的陈述?_Python_Postgresql_Questdb - Fatal编程技术网

Python 是否可以将psychopg2用于准备好的陈述?

Python 是否可以将psychopg2用于准备好的陈述?,python,postgresql,questdb,Python,Postgresql,Questdb,我正在比较Postgres客户端的一些特性以确保兼容性,我很难准备好在psychopg2中使用的语句。Node.jspg包允许我在提供名称(insert values)准备查询服务器端时执行以下操作: for(让行=0;行

我正在比较Postgres客户端的一些特性以确保兼容性,我很难准备好在psychopg2中使用的语句。Node.js
pg
包允许我在提供名称(
insert values
)准备查询服务器端时执行以下操作:

for(让行=0;行<10;行++){
//提供“名称”字段允许准备语句/绑定变量
常量查询={
名称:“插入值”,
文本:“在我的表格中插入值($1,$2,$3,$4);”,
值:[Date.now()*1000,Date.now(),“node pg prep statement”,行],
}
const preparedStatement=wait client.query(查询)
}
在Python中,我使用以下命令执行类似的操作:

#插入10条记录
对于范围(10)内的x:
now=dt.datetime.utcnow()
date=dt.datetime.now().date()
cursor.execute(“”)
插入交易
值(%s,%s,%s,%s);
“”,(现在,日期,“python示例”,x))
#提交记录
commit()连接
有没有办法用Python创建准备好的语句


编辑我使用的样本来自

据我所知,不支持“神奇地”准备语句。但是,您可以使用
execute()
执行SQL
PREPARE
execute
语句


您可能想阅读手册中的章节。

据我所知,不支持“神奇地”准备语句。但是,您可以使用
execute()
执行SQL
PREPARE
execute
语句

您可能想阅读手册中的章节。

为什么不呢


date = dt.datetime.now().date()
insert_sql = """INSERT INTO trades
        VALUES (%s, %s, %s, %s)"""
# insert 10 records
for x in range(10):
    now = dt.datetime.utcnow()
    cursor.execute(insert_sql, (now, date, "python example", x))
# commit records
connection.commit()

结果是一样的。查询只生成一次,然后使用
x
的不同参数运行多次。正如@Ture Pålsson所指出的,您可以使用此处的帮助程序组合插入的

为什么不呢


date = dt.datetime.now().date()
insert_sql = """INSERT INTO trades
        VALUES (%s, %s, %s, %s)"""
# insert 10 records
for x in range(10):
    now = dt.datetime.utcnow()
    cursor.execute(insert_sql, (now, date, "python example", x))
# commit records
connection.commit()


结果是一样的。查询只生成一次,然后使用
x
的不同参数运行多次。正如@Ture Pålsson所指出的,您可以使用此处的帮助程序组合
插入内容。

即使在2021年,Psycopg2中也没有现成的语句支持。是的,您可以准备并使用带参数的命名查询,但Psycopg2不支持这种方法,正如您可以在Java JDBC或Rust Postgres驱动程序中找到它一样


如果您开始使用INSERT语句编写循环,则每次迭代都会发送完整的语句文本,并且必须由DB进行解析,因此对于大循环来说,IO/CPU开销将是可测量的。

即使在2021年,Psycopg2中也没有准备好的语句支持。是的,您可以准备并使用带参数的命名查询,但Psycopg2不支持这种方法,正如您可以在Java JDBC或Rust Postgres驱动程序中找到它一样


如果开始使用INSERT语句编写循环,则每次迭代都会发送完整的语句文本,并且必须由DB进行解析,因此对于大循环来说,IO/CPU开销将是可测量的。

是的,这是一个好主意,但for循环中的时间戳不会更新。看起来我仍然缺少要在服务器端编译的语句,这在节点的
pg
库中可以使用“name”属性。将时间戳移动到循环中。正如@TurePålsson建议的,您可以直接使用
cur.EXECUTE()
使用
PREPARE/EXECUTE
。是的,这是一个好主意,但是for循环中不会更新时间戳。看起来我仍然缺少要在服务器端编译的语句,这在节点的
pg
库中可以使用“name”属性。将时间戳移动到循环中。正如@TurePålsson所建议的,您可以直接使用
PREPARE/EXECUTE
cur.EXECUTE()
。感谢您的提示,我将尝试
cursor.EXECUTE()
执行值()
谢谢您的提示,我将尝试
cursor.EXECUTE\u values()