Использование каналов для перенаправления сгенерированного функцией SQL-запроса в команду psql - PullRequest
0 голосов
/ 06 ноября 2010

У меня есть скрипт, который генерирует SQL-запрос в виде текста, например

...
return "SELECT COUNT(*) FROM important_table" 

, который я бы затем хотел запустить в базе данных PostgreSQL.Я могу сделать это в две строки, например:

python SQLgeneratingScript.py parameters > temp.sql 
psql -f temp.sql -d my_database 

Но похоже, что я должен быть в состоянии обвести его одной строкой, но я не знаю как.

Ответы [ 2 ]

2 голосов
/ 06 ноября 2010
python SQLgeneratingScript.py parameters|psql -d my_database
0 голосов
/ 06 ноября 2010

Я не знаю, почему вы не используете Python postgresql коннектор, такой как psycopg2 , но хорошо, если вы хотите делать то, что вы пытаетесь сделать, используя Перенаправление команд Unix youнужно будет сделать это следующим образом в вашем коде

...
print "SELECT COUNT(*) FROM important_table"  # or use sys.stdout.write()

это запишет в ваш файл temp.sql, если вы выполнили свою команду следующим образом:

python SQLgeneratingScript.py parameters > temp.sql

но хорошо, я будупредложите записать в ваш файл на python, например,

def generate_sql():
   ...
   return "SELECT COUNT(*) FROM important_table"

with open('temp.sql', 'w') as f
   sql = generate_sql()
   f.write(sql)

или более, используйте psycopg2 для непосредственного выполнения вашего sql

import psycopg2

def generate_sql():
    ...
    return "SELECT COUNT(*) FROM important_table"

conn = psycopg2.connect("dbname= ...")

cur = conn.cursor()
sql = generate_sql()
cur.execute(sql)

conn.close()
...