gpt4 book ai didi

python - psycopg2 AsIs 和 sql 模块之间的区别

转载 作者:行者123 更新时间:2023-11-30 22:40:06 24 4
gpt4 key购买 nike

为了在查询中动态选择表名,我使用 psycopg2.extensions ( http://initd.org/psycopg/docs/extensions.html#psycopg2.extensions.AsIs ) 中的 AsIs() ,语法如下:

cur.execute("SELECT * FROM %s WHERE id = %s;", (AsIs('table_name'), id))

但是,文档现在建议使用 2.7 版 ( http://initd.org/psycopg/docs/sql.html#module-psycopg2.sql ) 中提供的新 psycopg2.sql 模块,语法如下:

from psycopg2 import sql

cur.execute(
sql.SQL("SELECT * FROM {} WHERE id = %s;")
.format(sql.Identifier('table_name')), (id, )

除了 sql 模块公开的对象可以直接传递给 execute() 之外,这两个选项之间还有什么区别?

最佳答案

AsIs 是...原样。如果表名包含需要引用的字符,它不会执行任何转义。 sql 模块中的对象知道什么是 an identifier .

更巧妙的是,AsIs 仅适用于参数值:如果当前有效主要是实现意外,将来行为可能会改变。查询值不应用于表示查询的可变部分,例如表或字段名称。

关于python - psycopg2 AsIs 和 sql 模块之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42947885/

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