python postgresql schema psycopg2

Ejecute el esquema.sql en psycopg2 en Python



psycopg2 fetchall (2)

Tengo un esquema PostgreSQL almacenado en un archivo .sql. Parece algo así como:

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 );

¿Cómo debo ejecutar este esquema después de conectarme a la base de datos?

Mi código Python existente funciona para bases de datos 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())

Pero el psycopg2 no tiene un método de ejecución en el cursor. Entonces, ¿cómo puedo lograr esto?


No puedo responder a los comentarios de la respuesta seleccionada por falta de reputación, por lo que responderé para ayudar con el problema de COPY .

Dependiendo del volumen de su base de datos, pg_dump --inserts genera INSERT s en lugar de COPY s


Solo puedes usar execute :

with self.connection as cursor: cursor.execute(open("schema.sql", "r").read())

aunque es posible que desee configurar psycopg2 en modo de confirmación autocommit primero para que pueda utilizar la propia administración de transacciones del script.

Sería bueno si psycopg2 ofreciera un modo más inteligente en el que leyera el archivo en una declaración a la vez y lo enviara a la base de datos, pero hasta el momento no existe tal modo de verlo. Necesitaría un analizador bastante sólido para hacerlo correctamente cuando se enfrentan a las cotizaciones $$ (y su variante $delimiter$ donde el deimitador puede ser cualquier identificador), standard_conforming_strings , E'''' string, cuerpos de función anidados, etc.

Tenga en cuenta que esto no funcionará con:

  • cualquier cosa que contenga comandos de barra invertida psql
  • COPIA .. DE STDIN
  • entrada muy larga

... y por lo tanto no funcionará con volcados de pg_dump