如何在psycopg2中保存查询中的CSV文件

时间:2017-01-26 22:39:08

标签: python postgresql csv psycopg2

我正在尝试将本地.csv中的查询结果保存到PostgreSQL数据库(使用psycopg2)。

我可以在控制台中打印查询结果,但无法将其导出到csv文件。

我尝试过使用copy_to函数,但即使使用documentation,我也无法理解:

    # Retrieve the records from the database with query
    cursor.execute("SELECT col1 FROM myDB.myTable WHERE col1 > 2")
    records = cursor.fetchall()

    # Save to csv with copy_to
    io = open('copy_to.csv', 'w')
    cursor.copy_to(io, 'records', ',')
    print("Copied records from query into file object using sep = ,")
    io.close()

这会引发错误“psycopg2.ProgrammingError:relation”记录“不存在”。

有没有更好的方法将查询结果存储在本地表中,可以在 copy_to 中传递?感谢您的任何提示!

3 个答案:

答案 0 :(得分:0)

希望这会有所帮助:

cursor.copy_to(COPY table TO file syntax)

所以在您的情况下:

cursor.copy_to(COPY records TO io)

答案 1 :(得分:0)

我做了更多研究,这是另一种可能更可行的解决方案:

``` python
import psycopg2

#note the lack of trailing semi-colon in the query string, as per the Postgres documentation
s = "'SELECT col1 FROM myDB.myTable WHERE col1 > 2'"

conn = psycopg2.connect...
db_cursor = conn.cursor()

SQL_for_file_output = "COPY ({0}) TO STDOUT WITH CSV HEADER".format(s)

WITH Open(filepath/name, 'w') as f_output:
    cur.copy_expert(SQL_for_file_output, f_output)

conn.close()
```

答案 2 :(得分:0)

这对我有用:

csv