Postgres - hvordan kan du udføre en multiline forespørgsel fra Python ved hjælp af psql på Windows?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil gerne kunne køre multiline forespørgsler med psql og forsøgte at skrive en biblioteksfunktion til at gøre det, men jeg får en 'Tilladelse nægtet' fejl -


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

Bedste reference


Dette er ikke så flot udseende, men det virker:


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


Fejlen synes at skyldes, at Windows ikke er i stand til at åbne en fil igen -



  Uanset om navnet kan bruges til at åbne filen en anden gang, mens den navngivne midlertidige fil stadig er åben, varierer på tværs af platforme (den kan så bruges på Unix; den kan ikke bruges på Windows NT eller senere).



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