![](/img/trans.png)
[英]Using Python for .csv import into postgreSQL : Eliminate Duplicates
[英]Python PostgreSQL CSV Import empty field sorter
我正在嘗試將一個相當大的 csv 文件(21 列/125k 行)導入 Postgres。 由於您不能像使用 Sqlite 那樣將空字符串插入 Postgres。 我正在嘗試使用 csvDictReader 對每一行進行排序並過濾數據,以便為包含數據的列/字段創建插入語句。 排序效果很好,但是當我嘗試創建插入語句時,它會嘗試插入數組而不是每個值...請不要建議其他方式,例如 Postgresql 的副本等。謝謝
with codecs.open(filename, 'rb', encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile, delimiter='\t')
a=0
col=[]
val=[]
for row in reader:
if a>0:
for column, value in row.items():
if value != '':
#print column, value
col.append(column)
val.append(value)
try:
c.execute('''INSERT INTO AMA (%s) VALUES (%s) ON CONFLICT DO NOTHING''',(col,val,))
except psycopg2.IntegrityError as e:
print e
col=[]
val=[]
a=a+1
psycopg2.ProgrammingError:在“ARRAY”第 1 行或附近出現語法錯誤:INSERT INTO AMA (ARRAY['fulfillment-id', 'sku', 'settleme...
設法走到這一步,但現在有一個不同的問題:
with codecs.open(filename, 'rb', encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile, delimiter='\t')
a=0
col=[]
val=[]
for row in reader:
for column, value in row.items():
if value != '':
col.append(column)
val.append(value)
try:
query='''INSERT INTO AMA %s VALUES %s ON CONFLICT DO NOTHING'''
print c.mogrify(query, (tuple(col), tuple(val)))
c.execute(query, (tuple(col), tuple(val),))
except psycopg2.IntegrityError as e:
print e
col=[]
val=[]
a=a+1
psycopg2.ProgrammingError:在“'currency'”處或附近出現語法錯誤第 1 行:INSERT INTO AMA ('currency', 'settlement-id', 'deposit-da
看起來我需要在 PostgreSQL 中的列名周圍使用" "
而不是''
。 我能做些什么來改變它?
找到了一個可行的解決方案,如果有任何關於如何提高速度的想法,比如執行很多等等,請告訴我..
with codecs.open(filename, 'rb', encoding='utf-8') as csvfile:
reader = csv.DictReader(csvfile, delimiter='\t')
a=0
col=[]
val=[]
for row in reader:
for column, value in row.items():
if value != '':
col.append(column)
val.append(unicode(value, "utf8"))
try:
query1=sql.SQL("INSERT INTO AMA ({}) VALUES ({}) ON CONFLICT DO NOTHING").format(sql.SQL(', ').join(map(sql.Identifier, col)),sql.SQL(', ').join(sql.Placeholder() * len(col)))
query=c.mogrify(query1, tuple(val),)
#print query
c.execute(query)
except psycopg2.IntegrityError as e:
print e
col=[]
val=[]
a=a+1
使用 psycopg2 的 SQL 函數,可以創建正確格式的 sql,表在“”中,值在 '' 中,然后只需使用具有數據的表和值創建列表即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.