私はpostgresテーブルを持っています。私はpythonを使ってこれらのテーブルにPostgreSQL
スクリプトファイルを実行し、その結果をcsvファイルに書き込みたいと思います。スクリプトファイルにはセミコロンで区切られた複数のクエリがセミコロン;
にあります。Pythonを使ったpostgresスクリプトの読み込み
--Duplication Check
select p.*, c.name
from scale_polygons_v3 c inner join cartographic_v3 p
on (metaphone(c.name_displ, 20) LIKE metaphone(p.name, 20)) AND c.kind NOT IN (9,10)
where ST_Contains(c.geom, p.geom);
--Area Check
select sp.areaid,sp.name_displ,p.road_id,p.name
from scale_polygons_v3 sp, pak_roads_20162207 p
where st_contains(sp.geom,p.geom) and sp.kind = 1
and p.areaid != sp.areaid;
私はPythonのコードを実行すると、それはエラーなしで正常に実行されますが、私は直面しています問題はにクエリの結果を書き込み中に、次のとおりです。サンプルスクリプトは
スクリプトファイルの下に示されていますcsvファイル最後に実行されたクエリの結果のみがcsvファイルに書き込まれます。つまり、最初のクエリー結果は2番目のクエリーで上書きされ、2番目のクエリー結果は3番目にクエリーされ、最後のクエリーまで続きます。ここで
は私のpythonのコードです:
import psycopg2
import sys
import csv
import datetime, time
def run_sql_file(filename, connection):
'''
The function takes a filename and a connection as input
and will run the SQL query on the given connection
'''
start = time.time()
file = open(filename, 'r')
sql = s = " ".join(file.readlines())
#sql = sql1[3:]
print "Start executing: " + " at " + str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M")) + "\n"
print "Query:\n", sql + "\n"
cursor = connection.cursor()
cursor.execute(sql)
records = cursor.fetchall()
with open('Report.csv', 'a') as f:
writer = csv.writer(f, delimiter=',')
for row in records:
writer.writerow(row)
connection.commit()
end = time.time()
row_count = sum(1 for row in records)
print "Done Executing:", filename
print "Number of rows returned:", row_count
print "Time elapsed to run the query:",str((end - start)*1000) + ' ms'
print "\t ==============================="
def main():
connection = psycopg2.connect("host='localhost' dbname='central' user='postgres' password='tpltrakker'")
run_sql_file("script.sql", connection)
connection.close()
if __name__ == "__main__":
main()
私のコードが間違っていますか?
おそらく役に立ちませんが、コードは私によく見えます。あなたは[ここ](http://stackoverflow.com/questions/2363731/append-new-row-to-old-csv-file-python)のようにモード 'a'でファイルを開いています – Matthias
1回の呼び出しでは、実行された最後のコマンド(または何かが間違っている場合はエラー)の場合にのみ結果が得られます。 – Abelisto
すべてのクエリは同じ数の列を持ち、同じ型(および順序)のクエリですか? –