PostgreSQLスキーマを.sqlファイルに保存しています。それは次のようになります:
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
facebook_id TEXT NOT NULL,
name TEXT NOT NULL,
access_token TEXT,
created INTEGER NOT NULL
);
データベースに接続した後、このスキーマをどのように実行しますか?
私の既存のPythonコードはSQLiteデータベースで機能します:
# Create database connection
self.connection = sqlite3.connect("example.db")
# Run database schema
with self.connection as cursor:
cursor.executescript(open("schema.sql", "r").read())
しかし、psycopg2のカーソルにはexecutescript
メソッドがありません。それで、どうすればこれを達成できますか?
execute
を使用するだけです。
with self.connection as cursor:
cursor.execute(open("schema.sql", "r").read())
ただし、 psycopg2をautocommit
モードに最初に設定 して、スクリプト自体のトランザクション管理を使用することもできます。
Psycopg2が、一度にステートメントでファイルを読み取ってDBに送信する、よりスマートなモードを提供していればいいのですが、現在のところ、そのようなモードはありません。 $$
クォーティング(およびその$delimiter$
バリアント(区切り文字は任意の識別子である可能性があります))、standard_conforming_strings
、E''
に直面したときに正しく実行するには、かなり堅固なパーサーが必要です文字列、ネストされた関数本体など.
これはでは機能しないことに注意してください:
psql
バックスラッシュコマンドを含むもの...したがって、pg_dump
からのダンプでは機能しません
選択した回答のコメントに評判がないため返信できないので、COPY
の問題を解決するために回答します。
DBのボリュームに応じて、pg_dump --inserts
はINSERT
sの代わりにCOPY
sを出力します