2015-08-23 30 views
1

簡單的SQL語句:爲什麼PostgreSQL cursor.execute()命令添加單引號?

sql = "DROP TABLE IF EXISTS %s" 
cursor.execute(sql, ("user_table",)) 

它失敗:

psycopg2.ProgrammingError: syntax error at or near "'user_table'" 
LINE 1: DROP TABLE IF EXISTS 'user_table' 

在SQL語句中的單引號的問題。如果我運行它,它工作得很好:

cursor.execute("DROP TABLE IF EXISTS user_table") 

回答

3

您可以使用參數 - 語法僅用於參數,不適用於表或列名稱。

+0

已經有效,非常有意義。謝謝! –

+0

更嚴格地說,查詢參數僅適用於傳遞文字。你不能用它們替代標識符或關鍵字。 –

2

AsIs適配器的對象,其字符串表示有用的是SQL表示

from psycopg2.extensions import AsIs 

sql = "DROP TABLE IF EXISTS %s" 
cursor.execute(sql, (AsIs("user_table"),))