我尝试按照docs中描述的方式传递参数,但是我收到以下错误:文件“slug_word.py”,第100行,在get_col cur.execute(“select%s from%s”,data)psycopg2。 ProgrammingError:“E'catalog_category”或其附近的语法错误“第1行:从E'catalog_category中选择E'slug”
以下是我的代码摘录:
def get_col(cxn, table, col):
"fetch a column"
cur = cxn.cursor()
data = (col, table)
cur.execute("select %s from %s" , data )
rows = cur.fetchall()
return rows
def main():
cxn = connect('galleria')
table = 'catalog_category'
col = 'slug'
rows = get_col(cxn, table, col)
通过重读关于这个问题的帖子Steve Holden,我发现在我的代码中必须以python方式传递参数的提示:
..."select %s from %s" % data )
只有进入数据库的“真实”数据必须使用psycopg2参数方法,而不是表格和列名称。不幸的是,混合数据和表名不起作用。
你可以使用AsIs psycopg2函数:
适配器符合ISQLQuote协议,该协议对于其字符串表示已作为SQL表示有效的对象非常有用。
import psycopg2
from psycopg2.extensions import AsIs
def get_col(conn, table, col):
'''Fetch a column'''
QUERY = 'SELECT %(col)s from %(table)s'
data = {'col': AsIs(col), 'table': AsIs(table)}
with conn.cursor() as cursor:
cursor.execute(QUERY, data)
rows = cursor.fetchall()
return rows