2015-11-18 103 views
1

我知道那裏有很多類似的問題,但我還沒有找到一個幫助我的問題。psycopg2.ProgrammingError:語法錯誤

我正在使用Python和psycopg2與PostGresql數據庫進行交互。這裏是我的代碼:

conn = psycopg2.connect(dbname=db_name, user=user_name) 
conn.set_isolation_level(psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT) 
cursor = conn.cursor() 
add_query = 'CREATE ROLE %s WITH CREATEDB LOGIN PASSWORD \'%s\'' 
add_data = (user_name, password) 
cursor.execute(add_query, add_data) 

我不斷收到此錯誤:

psycopg2.ProgrammingError: syntax error at or near "'foo'" LINE 1: CREATE ROLE 'foo' WITH CREATEDB LOGIN PASSWORD ''bar''

我認爲這是與逃逸引號的問題,但我有斜線的每個組合和報價,我能想到的與沒有運氣。

回答

3

AsIs

from psycopg2.extensions import AsIs 

add_query = "CREATE ROLE %s WITH CREATEDB LOGIN PASSWORD %s" 
add_data = (AsIs(user), password) 

角色名是一個標識符,所以沒有單引號。如果預計會出現非法字符,它可以用雙引號括起來,否則就是一個壞主意。

密碼是一個字符串,所以讓Psycopg適應並逃避它。

+0

請注意,這將使角色名稱進行大小寫摺疊。如果你想避免,你需要標識符引用它。不幸的是,psycopg2不提供'psycopg2.extensions.QuotedString'的標識引用變體,因此您必須編寫一個或只需手動加雙引號。 –

+0

謝謝,@Clodoaldo內託。這就像一個魅力! –

相關問題