Você pode simplesmente usar
execute
:with self.connection as cursor:
cursor.execute(open("schema.sql", "r").read())
embora você possa querer definir psycopg2 como
autocommit
modo primeiro
para que você possa usar o próprio gerenciamento de transações do script. Seria bom se o psycopg2 oferecesse um modo mais inteligente em que lesse o arquivo em uma instrução por vez e o enviasse para o banco de dados, mas no momento não existe esse modo até onde eu sei. Precisaria de um analisador bastante sólido para fazê-lo corretamente quando confrontado com
$$
citando (e seu $delimiter$
variante onde o delimitador pode ser qualquer identificador), standard_conforming_strings
, E''
strings, corpos de função aninhados, etc. Observe que isso não trabalhar com:
- qualquer coisa que contenha
psql
comandos de barra invertida - COPIAR .. DE STDIN
- muito entrada longa
... e, portanto, não funcionará com dumps de
pg_dump