psycopg2将参数传递给SQL编程错误

问题描述 投票:0回答:2

我尝试按照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)
parameters psycopg2
2个回答
2
投票

通过重读关于这个问题的帖子Steve Holden,我发现在我的代码中必须以python方式传递参数的提示:

 ..."select %s from %s" % data ) 

只有进入数据库的“真实”数据必须使用psycopg2参数方法,而不是表格和列名称。不幸的是,混合数据和表名不起作用。


1
投票

你可以使用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
© www.soinside.com 2019 - 2024. All rights reserved.