我试图使用
python将2个numpy数组列插入postgresql表作为两个数组.
postgresql表是DOS:
首要的关键
能量整数[]
dos整数[]
我有一个numpy数组,是2x1D数组的2d数组:
finArray = np.array([energy,dos])
我试图使用以下脚本插入数据库,我一直在插入错误.我无法弄清楚如何格式化数组,以便在表单中正确格式化:INSERT INTO dos VALUES(1,'{1,2,3}’,'{1,2,3}’)“
脚本:
import psycopg2
import argparse
import sys
import re
import numpy as np
import os
con = None
try:
con = psycopg2.connect(database='bla', user='bla')
cur = con.cursor()
cur.execute("INSERT INTO dos VALUES(1,'{%s}')", [str(finArray[0:3,0].tolist())[1:-1]])
con.commit()
except psycopg2.DatabaseError, e:
if con:
con.rollback()
print 'Error %s' % e
sys.exit(1)
finally:
if con:
con.close()
我无法弄清楚的部分是我会得到这样的错误:
Error syntax error at or near "0.31691105000000003"
LINE 1: INSERT INTO dos VALUES(1,'{'0.31691105000000003, -300.0, -19...
我无法弄清楚支架中内部”的来源.
最佳答案 太晚了,但无论如何要把它拿出来.
我今天试图在Redshift中插入一个numpy数组.在尝试了odo,df.to_sql()之后,我终于让它以相当快的速度(~3k行/分钟)工作.我不会谈论我在使用这些工具时遇到的问题,但这里有一些简单的工作原理:
cursor = conn.cursor()
args_str = b','.join(cursor.mogrify("(%s,%s,...)", x) for x in tuple(map(tuple,np_data)))
cursor.execute("insert into table (a,b,...) VALUES "+args_str.decode("utf-8"))
cursor.commit()
cursor.close()
第二行需要根据数组的尺寸进行一些工作.
您可能也想检查这些答案:
> Converting from numpy array to tuple
> Multiple row inserts in psycopg2