Python pg8000从CSV复制

Python pg8000从CSV复制,python,csv,google-app-engine,pg8000,Python,Csv,Google App Engine,Pg8000,我在appengineflask应用程序上使用,以便能够处理CSV文件并将其插入PSQL实例(托管于AZURE) 为什么我使用的是pg8000,而不是psycopg2?->因为应用引擎不支持psycopg2 到目前为止,pg8000的文档中并没有像psycopg2那样声明一个函数。我还没有找到一个在SO或任何其他地方实现这一点的例子,包括文档 有人知道这是否可行吗?看看,似乎没有直接导入CSV的方法,代码似乎也没有在插入查询周围内置任何包装器,从而可以 您可以选择手动使用CSV读取器和使用exe

我在appengineflask应用程序上使用,以便能够处理CSV文件并将其插入PSQL实例(托管于
AZURE

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

到目前为止,
pg8000
的文档中并没有像psycopg2那样声明一个函数。我还没有找到一个在SO或任何其他地方实现这一点的例子,包括文档

有人知道这是否可行吗?

看看,似乎没有直接导入CSV的方法,代码似乎也没有在
插入
查询周围内置任何包装器,从而可以

您可以选择手动使用CSV读取器和使用
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)
作为警告,根据数据的大小,最好使用:

综上所述,似乎没有直接导入CSV的方法,代码似乎也没有任何内置的
INSERT
查询包装器,因此可以

您可以选择手动使用CSV读取器和使用
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)
作为警告,根据数据的大小,最好使用:


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

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

我有同样的问题,我用下面的方法解决了这个问题。请注意,对我来说,正确的执行方法是在
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)

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

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

我有同样的问题,我用下面的方法解决了这个问题。请注意,对我来说,正确的执行方法是在
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)

这可以正常工作,但会引发以下错误:
编程错误:(u'error',u'error',u'42601',u'INSERT的目标列比表达式'u'79',u'analyze.c',u'884',u'transformInsertRow'多)
,您能帮助我吗?其中一列是autoincrement,未在insert语句中指定。这是SQL错误。您应该首先尝试让SQL正常工作,然后将其插入到
executemany
。修复!然而,这需要很多时间来处理。我们不能使用copy命令而不是插入吗?@codennijamysql支持load-infle-。这应该比单独插入快得多。如果在插入过程中表上有键,请确保禁用和启用键。这可以正常工作,但会引发以下错误:
ProgrammingError:(u'error',u'error',u'42601',u'INSERT的目标列比表达式'u'79',u'analyze.c',u'884',u'transformInsertRow')
,您能帮助我吗?其中一列是autoincrement,未在insert语句中指定。这是SQL错误。您应该首先尝试让SQL正常工作,然后将其插入到
executemany
。修复!然而,这需要很多时间来处理。我们不能使用copy命令而不是插入吗?@codennijamysql支持load-infle-。这应该比单独插入快得多。如果在插入期间表上有键,请确保禁用和启用键。