【发布时间】:2017-08-14 08:17:01
【问题描述】:
要在查询中动态选择表名,我曾经使用 AsIs() from psycopg2.extensions ( http://initd.org/psycopg/docs/extensions.html#psycopg2.extensions.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() 之外,这两个选项有什么区别?
【问题讨论】:
标签: python psycopg2 string-concatenation query-parameters string-interpolation