gpt4 book ai didi

Python 数据库 API : how to handle different paramstyles?

转载 作者:太空狗 更新时间:2023-10-29 17:33:31 25 4
gpt4 key购买 nike

我正在实现一个 Python 本体类,它使用数据库后端来存储和查询本体。数据库模式是固定的(预先指定),但我不知道使用的是什么类型的数据库引擎。但是,我可以相信数据库引擎的 Python 接口(interface)使用 Python DB-API 2.0 ( PEP 249 )。一个直接的想法是让用户将符合 PEP 249 的 Connection 对象传递给我的本体的构造函数,然后它将使用各种硬编码的 SQL 查询来查询数据库:

class Ontology(object):
def __init__(self, connection):
self.connection = connection

def get_term(self, term_id):
cursor = self.connection.cursor()
query = "SELECT * FROM term WHERE id = %s"
cursor.execute(query, (term_id, ))
[...]

我的问题是允许不同的数据库后端在查询中支持不同的参数标记,由后端模块的 paramstyle 属性定义。例如,如果 paramstyle = 'qmark',则接口(interface)支持问号样式 (SELECT * FROM term WHERE id = ?); paramstyle = 'numeric' 表示数字位置样式 (SELECT * FROM term WHERE id = :1); paramstyle = 'format' 表示 ANSI C 格式字符串样式(SELECT * FROM term WHERE id = %s)。如果我想让我的类能够处理不同的数据库后端,似乎我必须准备所有的参数标记样式。这似乎违背了通用数据库 API 的全部目的,因为我不能对不同的数据库后端使用相同的参数化查询。

是否有解决方法,如果有,最好的方法是什么? DB API 没有指定通用转义函数的存在,我可以使用它来清理查询中的值,因此手动转义不是一种选择。我不想通过使用更高级别的抽象(例如 SQLAlchemy)向项目添加额外的依赖项。

最佳答案

  • This Python recipe可能会有所帮助。它引入了一个额外的抽象层来将参数包装在它自己的 Param 类中。

  • PyDal项目也可能更接近您想要实现的目标:“PyDal 可以将相同的参数样式和日期时间类型与任何符合 DBAPI 2.0 的模块一起使用。此外,参数样式和日期时间类型是可配置的。

关于Python 数据库 API : how to handle different paramstyles?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3829098/

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