pg8000 从 CSV 复制

pg8000 copy from CSV

我在 App Engine flask 应用程序上使用 pg8000,这样我就可以处理 CSV 文件并将其插入到 PSQL 实例(托管在 AZURE 上)。

为什么我使用 pg8000 而不是 psycopg2? -> 因为应用引擎不支持 psycopg2。

到目前为止,pg8000 的文档没有说明可以像 psycopg2 那样执行此操作的函数。我还没有找到在 SO 或任何其他地方(包括文档)实现此目的的示例。

有人知道这是否可行吗?

查看 the source code,似乎没有直接导入 CSV 的方法,代码似乎也没有围绕 INSERT 查询的任何内置包装器,因此可以

您可以选择手动使用 CSV reader 和使用 executemany:

import csv
import pg8000

conn = pg8000.connect(user="postgres", password="C.P.Snow")
cursor = conn.cursor()

command = 'INSERT INTO book (title) VALUES (%s), (%s) RETURNING id, title'
with open('my-data.csv', 'rb') as fl:
    data = list(csv.reader(fl))
    conn.executemany(command, data)

请注意,根据数据的大小,使用 islice:

可能更好
with open('my-data.csv', 'rb') as fl:
    reader = csv.reader(fl)
    slice = itertool.islice(reader, 100)
    while slice:
        conn.executemany(command, slice)
        slice = itertool.islice(reader, 100)

正如另一个问题 here 中所建议的,您可以在对 csv 文件应用逻辑之前和使用 csv 读取方法之前使用 next 方法。

很抱歉没有插入作为对先前答案的补充,但我没有足够的积分来这样做。

我遇到了同样的问题,我使用下面的方法解决了这个问题。请注意,对我来说,执行 many 的正确方法是在 cursor 对象上,而不是在 conn.

conn = pg8000.connect(user='username', password='password', host='host', port=5432, database='database name')
cursor = conn.cursor()

command = "INSERT INTO public.salesforce_accounts (field1, field2, field3, field4, field5, field6) VALUES (%s, %s, %s, %s, %s, %s)"
with open('test.csv', 'r') as file:
    next(file)
    data = list(csv.reader(file))
    cursor.executemany(command, data)