Python与Postgres接口支持真正的预处理语句吗?

5 投票
3 回答
3316 浏览
提问于 2025-04-15 15:19

我一直在寻找一个适用于 Python 2.x 的 Postgres 接口,想要支持真正的预处理语句,但似乎找不到合适的。 我不想要那种只是把你传入的参数中的引号转义,然后在执行查询之前把它们拼接到查询里的接口。 有人有什么建议吗?

3 个回答

0

这些链接给出了使用psycopg2时的提示。你不需要特别的API扩展。

这里有一个我尝试过的例子。不过要提醒一下,我并没有得到我期待的性能提升。实际上,在一个我尝试逐行读取一百万行的整个表的情况下,速度反而稍微慢了一点。

cur.execute('''
    PREPARE prepared_select(text, int) AS
        SELECT * FROM test
        WHERE (name = $1 and rowid > $2) or name > $1
        ORDER BY name, rowid
        LIMIT 1
''')
name = ''
rowid = 0
cur.execute('EXECUTE prepared_select(%s, %s)', (name, rowid))
2

你可以使用 py-postgresql 这个库来在Python3中操作PostgreSQL数据库,或者用 pg_proboscis 这个库在Python2中操作。

另外,Python-pgsql 也可以用来做这个,但它在多线程的情况下不太安全。值得注意的是,SQLAlchemy这个库并不使用预编译语句。

撰写回答