![](/img/trans.png)
[英]Psycopg2 INSERT query string composition with execute_values
[英]Query String Composition in Psycopg2
我正在嘗試使用 Psycopg2 從 Python 在 Postgres 中運行 SQL“SELECT”查詢。 我正在嘗試編寫如下查詢字符串,但收到錯誤消息,使用 psycopg2 2.9 版。
from psycopg2 import sql
tablename = "mytab"
schema = "public"
query = sql.SQL("SELECT table_name from information_schema.tables where table_name = {tablename} and table_schema = {schema};")
query = query.format(tablename=sql.Identifier(tablename), schema=sql.Identifier(schema))
cursor.execute(query)
result = cursor.fetchone()[0]
錯誤:
psycopg2.error.InFailedSqlTransaction: current transaction is aborted, commands ignored until end of transaction block
有人可以幫忙嗎。 謝謝。
在(有點奇怪)查詢中
select table_name
from information_schema.tables
where table_name = 'mytab'
and table_schema = 'public';
'mytab'
和'public'
是文字,而不是標識符。 為了比較, mytab
是這里的標識符:
select *
from mytab;
因此,您的format
聲明應如下所示:
query = query.format(tablename=sql.Literal(tablename), schema=sql.Literal(schema))
請注意,引用的錯誤消息有些誤導,因為它是關於執行問題中顯示的查詢以外的查詢。
由於此查詢僅處理動態值,因此可以簡化為:
import psycopg2
con = psycopg2.connect(<params>)
cursor = con.cursor()
tablename = "mytab"
schema = "public"
# Regular placeholders
query = """SELECT
table_name
from
information_schema.tables
where
table_name = %s and table_schema = %s"""
cursor.execute(query, [tablename, schema])
result = cursor.fetchone()[0]
# Named placeholders
query = """SELECT
table_name
from
information_schema.tables
where
table_name = %(table)s and table_schema = %(schema)s"""
cursor.execute(query, {"table": tablename, "schema": schema})
result = cursor.fetchone()[0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.