gpt4 book ai didi

python - 使用 Jython 和 zxJDBC 的具有多行值的 SQL INSERT

转载 作者:搜寻专家 更新时间:2023-10-30 20:27:50 24 4
gpt4 key购买 nike

我使用 com.ziclix.python.sql 包在 Jython 中对 SQL 数据库进行编程。我想知道该包是否在其准备好的语句中支持 SQL INSERT/UPDATE 语句,您可以在其中传递多行值而不是一行,以便您在一个 INSERT 语句中插入多行。让我解释一下。

这是一个基本的 SQL INSERT 语句:

INSERT INTO Names (FirstName, LastName) VALUES ("John", "Doe");

使用 zxJDBC 准备好的语句,这非常简单:

# Assume cursor object
statement = 'INSERT INTO Names (FirstName, LastName) VALUES (?, ?)'
cursor.execute(statement, ('John', 'Doe'))

但我感兴趣的 INSERT 语句是插入多行值的地方,如下所示:

INSERT INTO Names (FirstName, LastName) VALUES ("John", "Doe"), ("Mary", "Smith");

有没有什么方法可以使用准备好的语句来做到这一点?如果可能的话,我宁愿使用准备好的语句来构建 SQL 查询而不是字符串插值。谢谢。

最佳答案

由于 zxJDBC 实现了 PEP 249 《Python Database API Specification v2.0》,你可以使用executemany()方法来完成:

# Assume cursor object
statement = 'INSERT INTO Names (FirstName, LastName) VALUES (?, ?)'
cursor.executemany(statement, (
('John', 'Doe'),
('Mary', 'Smith'),
# ...
)
)

更新:看起来这太慢了,因为 zxJDBC 只是多次调用执行而没有优化查询。相反,你可以这样做:

from itertools import chain
statement = 'INSERT INTO Names (FirstName, LastName) VALUES {values}'.format(
values = ','.join('(?, ?)' for _ in input_seq))
input_seq = (
('John', 'Doe'),
('Mary', 'Smith'),
# ...
)
cursor.execute(statement, list(chain(*input_seq)))

确实涉及一些字符串操作,但它保留了参数列表的使用并允许单个数据库往返。

关于python - 使用 Jython 和 zxJDBC 的具有多行值的 SQL INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22639343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com