繁体   English   中英

如何为PostreSQL和sqlite3编写psycopg2的SQL语句?

[英]How can I write SQL statements for psycopg2 for PostreSQL and sqlite3?

我在python中为我的生产环境使用psycopg2库用于PostgreSQL,但我想用sqlite3库测试我的代码。 问题是psycopg2使用%s作为参数替换的占位符,而sqlite3使用?

我对我现在获得的代码不满意,它看起来像这样:

queries = {
     'is_admin':          "SELECT * FROM admins WHERE user_id = ?;",
}

if dbtype == 'postgres':
    for key, value in queries.items():
        queries[key] = value.replace('?', '%s')

这是一个丑陋的黑客,但我不想写两次我的所有查询,那么这个问题的最佳解决方案是什么?

使用简单? %s字符串替换是危险的,您可能会破坏您的查询,或以各种不可预测的方式损害实际数据,这可能很难调试。


查看“SQL for humans” records ,它为所有受支持的数据库提供统一的参数化样式。

请注意, records只能使用SQLAlchemy包中的text()函数来实现与数据库无关的参数化样式。 您也可以直接使用它:

text()在普通字符串上提供的优点是对绑定参数的后端中立支持,每个语句执行选项,以及绑定参数和结果列类型行为,允许SQLAlchemy类型构造在执行语句时发挥作用按字面指定。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM