2017-10-11 12 views
0

我用psycopg2創建數據庫失敗,出現語法錯誤,但是在前幾行使用同樣的語法是工作,爲什麼要問?兩行代碼,爲什麼是第二行語法錯誤?psycopg creata數據庫失敗,語法錯誤

[代碼]

db_name = 'series_id' 
self._cur_root.execute("CREATE DATABASE '%s' owner %s ;" % (db_name, self.username)) 

[錯誤]

syntax error at or near "'series_id'" 
LINE 1: CREATE DATABASE 'series_id' owner postgres ; 
+0

您確定需要引用數據庫名稱嗎? –

回答

1

正確的代碼,來自%s除去科茨:

self._cur_root.execute("CREATE DATABASE %s owner %s ;" % (db_name, self.username)) 
1

PostgreSQL使用字符串單引號和雙爲文字以及可能被誤解或包含大寫字母的名稱。如果您需要引用名稱,請嘗試:

' CREATE DATABASE "%s" OWNER "%s"; ' % .... 

在這裏您手動呈現您的請求。通常最好使用DB驅動程序的函數來替換值 - 它們會進行適當的引用並防止SQL注入。