J'ai un schéma PostgreSQL stocké dans un fichier .sql. Cela ressemble à quelque chose comme:
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
);
Comment dois-je exécuter ce schéma après la connexion à la base de données?
Mon code Python fonctionne pour les bases de données 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())
Mais le psycopg2 n'a pas de méthode executescript
sur le curseur. Alors, comment puis-je y parvenir?
Vous pouvez simplement utiliser execute
:
with self.connection as cursor:
cursor.execute(open("schema.sql", "r").read())
bien que vous souhaitiez définissez d'abord psycopg2 sur le mode autocommit
afin que vous puissiez utiliser la gestion des transactions du script.
Ce serait bien si psycopg2 offrait un mode plus intelligent où il lisait le fichier dans une déclaration à la fois et l'envoyait à la base de données, mais à l'heure actuelle, il n'y a pas un tel mode à ma connaissance. Il aurait besoin d'un analyseur assez solide pour le faire correctement face à $$
citant (et son $delimiter$
variante où le deimiter peut être n'importe quel identifiant), standard_conforming_strings
, E''
chaînes, corps de fonction imbriqués, etc.
Notez que cela ne fonctionnera pas avec:
psql
commandes antislash... et ne fonctionnera donc pas avec les vidages de pg_dump
Je ne peux pas répondre aux commentaires de la réponse sélectionnée par manque de réputation, donc je vais faire une réponse pour aider avec le problème COPY
.
Selon le volume de votre base de données, pg_dump --inserts
affiche INSERT
s au lieu de COPY
s