根据"relation does not exist" in pg_table_size,我需要发出嵌套的单引号和双引号:
import psycopg2 as pg
from psycopg2 import sql
conn = pg.connect("dbname=test user=test")
table_name = "testDB"
cu = conn.cursor()
cu.execute(sql.SQL("SELECT pg_table_size(%s)"), (table_name,))
发射
SELECT pg_table_size('testDB')
,从而提高PysCopg2.编程错误:关系“TestDB”不存在
虽然
cu.execute(sql.SQL("SELECT pg_table_size({t})").format(t=sql.Identifier(table_name)))
发射
SELECT pg_table_size("testDB")
,从而提高PysCopg2.StudioError错误:列“TestDB”不存在
显然,
cu.execute(sql.SQL("SELECT pg_table_size(%s)"),('"testDB"',))
工作正常,但我想找到“官方”的方式来排放
SELECT pg_table_size('"testDB"')
。实验上,以下工作:
cu.execute(sql.SQL("SELECT pg_table_size(%s)"),
(sql.Identifier(table_name).as_string(conn), ))
这是TRT吗?
最佳答案
您可以使用Postgres函数quote_ident(string text):
cu.execute("SELECT pg_table_size(quote_ident(%s))", (table_name, ))
我认为您的最后一个例子是上述解决方案的一个很好的替代方案。
关于postgresql - 如何使psycopg2发出嵌套的引号?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52670840/