Puedes simplemente usar execute
:
with self.connection as cursor:
cursor.execute(open("schema.sql", "r").read())
aunque es posible que desee configurar psycopg2 para autocommit
modo primero
para que pueda utilizar la propia gestió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 en la actualidad no existe tal modo, que yo sepa. Necesitaría un analizador bastante sólido para hacerlo correctamente cuando se enfrente a $$
citando (y su $delimiter$
variante donde el delimitador puede ser cualquier identificador), standard_conforming_strings
, E''
cadenas, cuerpos de funciones anidadas, etc.
Tenga en cuenta que esto no trabajar con:
- cualquier cosa que contenga
psql
comandos de barra invertida - COPIAR .. DESDE STDIN
- muy entrada larga
... y por lo tanto no funcionará con volcados de pg_dump