根据"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/

10-11 20:39