Postgres - как выполнить многострочный запрос из Python с помощью psql в Windows? - PullRequest
0 голосов
/ 21 мая 2018

Я хотел бы иметь возможность запускать многострочные запросы с psql и пытался написать библиотечную функцию для этого, но я получаю ошибку «Отказано в доступе» -

import os
import tempfile

sql = 'select 1;'
with tempfile.NamedTemporaryFile('w') as f:
    f.write(sql)
    cmd = f'psql --file "{f.name}"'
    os.system(cmd) # error: Permission denied

1 Ответ

0 голосов
/ 21 мая 2018

Это не так красиво выглядит, но работает:

f = tempfile.NamedTemporaryFile('w', delete=False)
f.write(sql)
f.close()
cmd = f'psql --file "{f.name}"'
os.system(cmd)
os.remove(f.name)

Похоже, ошибка связана с тем, что Windows не может открыть файл второй раз -

Может ли имя использоваться для открытия файла во второй раз, пока именованный временный файл все еще открыт, зависит от платформы (его можно использовать в Unix; в Windows NT или более поздней версии это невозможно).

https://docs.python.org/3.6/library/tempfile.html#tempfile.NamedTemporaryFile

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...