簡體   English   中英

Psycopg2查詢從參數中刪除\\ n

[英]Psycopg2 query remove \n from args

我正在使用python3和postgres 11.5。

這是腳本:

a = cursor.execute("SELECT tablename FROM pg_catalog.pg_tables limit 5")
for table in a:
    cursor.execute("SELECT * FROM pg_prewarm(public.%s)", [table[0]])

查詢獲得一些表名,循環查詢應將表名作為%s運行。 但是由於某種原因,我在查詢中使用// // n獲得了arg table[0] ,並將其弄亂了。

如果我打印結果,我得到表名作為元組:

[('sa1591354519',), ('sa1591397719',), ('sa1591397719',)]

因此[table[0]]是一個字符串。

我得到的錯誤:

1574683839 [16177], ERR, execute ({'Error while connecting to PostgreSQL': SyntaxError('syntax error at or near "\'sa1591440919\'"\nLINE 1: SELECT * FROM pg_prewarm(public.\'sa1591440919\')\n                                        ^\n')},)

我能做什么 ?

錯誤與您看到的換行無關,換行只是錯誤消息的產物。 如果要打印出錯誤,將看到:

syntax error at or near "'sa1591440919'"
LINE 1: SELECT * FROM pg_prewarm(public.'sa1591440919')
                                        ^

換句話說,Postgres不喜歡您傳遞的表名,因為它包含引號。 之所以發生這種情況,是因為您試圖將表名視為普通的查詢參數,這會使psycopg對其進行引用...但是在這種情況下,這不是您想要的。

只需將查詢模板的用法替換為普通的Python字符串替換即可:

a = cursor.execute("SELECT tablename FROM pg_catalog.pg_tables limit 5")
for table in a:
    cursor.execute("SELECT * FROM pg_prewarm(public.%s)" % (table[0]))

但這實際上不起作用,因為cursor.execute不會返回值,所以a將為None 您將需要執行以下操作:

cursor.execute("SELECT tablename FROM pg_catalog.pg_tables limit 5")
a = cursor.fetchall()
for table in a:
  ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM