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

发布于 2024-12-25 18:17:56 字数 662 浏览 0 评论 0原文

我尝试按照文档中描述的方式传递参数,但是我收到以下错误: 文件“slug_word.py”,第 100 行,在 get_col 中 cur.execute("从%s中选择%s",数据) 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)

I tried to pass parameters the way it is described in the docs, but I get the following error:
File "slug_word.py", line 100, in get_col
cur.execute("select %s from %s" , data )
psycopg2.ProgrammingError: syntax error at or near "E'catalog_category'"
LINE 1: select E'slug' from E'catalog_category'

Here are extracts from my code:

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)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

往事风中埋 2025-01-01 18:17:56

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

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

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

By rereading a post Steve Holden about this issue I found the hint that in my code the parameters have to be passed the python way:

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

Only 'real' data which goes into the database has to use the psycopg2 parameter method and not things like table and column names.
Unfortunately mixing of data and table name does not work.

不甘平庸 2025-01-01 18:17:56

您可以使用 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

You can use AsIs psycopg2 function:

Adapter conform to the ISQLQuote protocol useful for objects whose
string representation is already valid as SQL representation.

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
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文