在psycopg2子句中未格式化的位置

我在使用psycopg2中的WHERE $VARIABLE IN子句时遇到了麻烦:

from app.commons.database import conn

from psycopg2 import sql
from psycopg2.extras import DictCursor

query = '''
    SELECT
        *
    FROM
        {}.{}
    WHERE
        {} in %s
    '''.format(
        sql.Identifier('information_schema'),sql.Identifier('tables'),sql.Identifier('table_schema')
    )

data = (
    'information_schema','pg_catalog'
)

with conn.cursor(cursor_factory=DictCursor) as cursor:
    cursor.execute(query,data)
    print(cursor.fetchall())

提高

  

TypeError:在字符串格式化期间并非所有参数都已转换

我已经看过关于同一主题的数百篇文章,并且压倒性的答案是:“在将数据作为cursor.execute的第二个参数提交时,您需要使用元组”。我一直在这样做,但似乎仍然无法确定差距在哪里。

w602350769 回答:在psycopg2子句中未格式化的位置

Lists adaptation上查看psycopg2文档

您收到该错误,因为psycopg2试图替换两个参数,但是您只给了它一个参数。尝试更改为此:

from app.commons.database import conn

from psycopg2 import sql
from psycopg2.extras import DictCursor

query = '''
    SELECT
        *
    FROM
        {}.{}
    WHERE
        {} =ANY(%s)
    '''.format(
        sql.Identifier('information_schema'),sql.Identifier('tables'),sql.Identifier('table_schema')
    )

data = [
    'information_schema','pg_catalog'
] # A list now,instead of a tuple

with conn.cursor(cursor_factory=DictCursor) as cursor:
    cursor.execute(query,(data,)) # A tuple,containing your list
    print(cursor.fetchall())
本文链接:https://www.f2er.com/3137360.html

大家都在问