[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