[pyar] ejecutar script .sql en postgres
Javier Marcon
javiermarcon en gmail.com
Vie Nov 27 01:54:51 ART 2015
Hola, estoy intentando ejecutar un script .sql que tiene varias
sentencias sql y estuve probando de 2 formas y no logro hacer que me lo
ejecute.
La primera forma es usando psycopg2:
>>> data = ""
>>> cnnsttr = "user=postgres host=localhost password=%s dbname=postgres"
% pasw
>>> from psycopg2 import connect
>>> from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT
>>> import re
>>> with open(path,"r") as sf:
... data = sf.read()
...
>>> pat = re.compile('--.*', re.MULTILINE)
>>> data = pat.sub('', data)
>>> conn = connect(cnnsttr)
>>> conn.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
>>> cur = conn.cursor()
>>> cur.execute(data)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
psycopg2.ProgrammingError: syntax error at or near ""
LINE 1:
^
>>>
La parte de re es para sacarle los comentarios de sql, pero si no la
pongo obtengo el mismo error. Si al script sql lo ejecuto con psql o en
una ventana de sql de pgadminIII, funciona perfecto, pero no puedo
hacerlo funcionar desde Python. Dicho archivo solo tiene sentencias
CREATE TABLE, CREATE INDEX y comentarios (que empiezan con -- o ---).
La segunda forma es:
>>> import re, os, subprocess
>>> d = dict(os.environ)
>>> d['PGPASSFILE'] = pasw
>>> work = subprocess.Popen(['psql',
... "-f%s" % path,
... "-d%s" % 'javiermarcon_1',
... "-h%s" % 'localhost',
... "-U%s" % 'postgres'
... ], env = d
... )
>>> Password for user postgres:
En esta segunda forma queria ponerle work.wait() pero antes de eso se
queda esperando la password (que le pasé por variable de entorno).
Alguien sabe como puedo ejecutar el script y que me funcione?
Gracias,
Javier.
More information about the pyar
mailing list