如何从 ZOPE 产品直接查询关系/SQL 数据库?

发布于 2024-10-20 03:09:59 字数 184 浏览 1 评论 0原文

如何连接并查询在 Zope 产品中配置了 DA(例如 ZPsycopgDA)的关系数据库?

我想使用绑定参数发送我自己的 SQL 查询并接收最好作为一组 Result 对象的结果。

我不想使用 ZSQLMethods,因为我无法事先为每个查询创建一个 ZSQLMethods,而且 ZSQLMethods 不支持绑定参数。

How do I connect to and query a relational database that was configured with a DA e.g. ZPsycopgDA in a Zope product?

I want to send my own SQL queries using bound parameters and receive the results preferrable as a set of Result objects.

I don't want to use ZSQLMethods as I can't create one for every query beforehand, and ZSQLMethods don't support bound parameters.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

单挑你×的.吻 2024-10-27 03:09:59

Zope 数据库适配器 (DA) 代码库是 Zope 中仍在使用的一些最古老的代码,因此有些过时。当您调用 Zope DA 时,您将获得一个数据库连接对象(一个数据库实例),该对象又具有一个查询方法:

connection = context.idOfZPsycoPGDA()
connection.query('SELECT * FROM your_table')

该查询方法并不完全是 Python 数据库 API 标准方法。它接受由 \0 空字符分隔的多个 SQL 语句,但如果有多个语句,则不支持 SELECT。

ZPsychoDA 查询方法还接受查询参数:

connection.query('SELECT * FROM your_table WHERE id=?', ('yourid',))

但更重要的是,ZPsychoDA 适配器还允许您访问常规数据库游标:

c = connection.cursor()
c.query('SELECT * FROM your_table WHERE id=?', ('yourid',))

我的建议是仅使用它并通过您到达的数据库游标执行常规 Python DB API 调用。

The Zope Database Adapters (DA) code base is some of the oldest code still in use in Zope, and is thus somewhat archaic. When you call a Zope DA, you get a database connection object (a DB instance) that in turn has a query method:

connection = context.idOfZPsycoPGDA()
connection.query('SELECT * FROM your_table')

The query method is not exactly a Python database API standard method. It accepts multiple SQL statements separated by \0 null characters, but won't support SELECTs if there is more than one statement.

The ZPsychoDA query method also accepts query parameters:

connection.query('SELECT * FROM your_table WHERE id=?', ('yourid',))

but more importantly, the ZPsychoDA adapter also gives you access to a regular database cursor:

c = connection.cursor()
c.query('SELECT * FROM your_table WHERE id=?', ('yourid',))

My advise is to just use that and do regular Python DB API calls via the database cursor you get there.

彼岸花似海 2024-10-27 03:09:59

数据库连接器实例应提供接受 SQL 命令的 query() 方法。然后您可以通过获取(或通过restrictedTraverse('/path/to/da')遍历来获取数据库适配器实例:

result = context.my_zpyscopgda.query("select * from foo")

result = context.restrictedTraverse('/path/to/my_zpyscopgda').query("select * from foo")

The database connector instances should provide a query() method accepting a SQL command. And you get hold of the database adapter instance through acquisition (or traversal via restrictedTraverse('/path/to/da'):

result = context.my_zpyscopgda.query("select * from foo")

result = context.restrictedTraverse('/path/to/my_zpyscopgda').query("select * from foo")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文