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)
我在 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)