2017-10-11 11 views
0

psycopg2を使用してデータベース障害、文法上の間違いを作成しましたが、最初の数行では同じ文法を使用して作業しています。 2行のコードは、なぜ文法上の間違いの第2行ですか?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インジェクションを防止します。

関連する問題