2010-11-05 25 views
0

我有一個腳本可以生成SQL查詢,如文本。使用管道將函數生成的SQL查詢重定向到psql命令

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

然後我想在PostgreSQL數據庫上運行。我可以這樣做兩行這樣:

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

但似乎我應該能夠單線與管道,但我不知道如何。

+0

??? – mouad 2010-11-05 22:12:15

回答

2
python SQLgeneratingScript.py parameters|psql -d my_database 
0

我不知道你爲什麼不使用Python的PostgreSQL的連接器一樣psycopg2,但遠,如果你想要做你正在嘗試使用Unix命令重定向做你將不得不做這樣這在你的代碼

... 
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你爲什麼不使用像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() 
+0

謝謝 - datacenter不會讓我安裝psycopg2(並且我還在搞清楚如何做ssh端口轉發):( – 2010-11-05 22:44:49