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
psqlcomandos de barra invertida - COPIAR .. DE STDIN
- muito entrada longa
... e, portanto, não funcionará com dumps de
pg_dump