WHERE IN psycopg2 子句未格式化
WHERE IN psycopg2 clause not formatting
我在 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: not all arguments converted during string formatting
我已经阅读了关于同一主题的看似数百篇帖子,压倒性的答案是:"you need to use tuples when submitting data as the second argument to cursor.execute
"。我一直在这样做,但似乎仍然无法确定差距在哪里。
上的 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())
我在 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: not all arguments converted during string formatting
我已经阅读了关于同一主题的看似数百篇帖子,压倒性的答案是:"you need to use tuples when submitting data as the second argument to cursor.execute
"。我一直在这样做,但似乎仍然无法确定差距在哪里。
您收到该错误是因为 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())