我试图使用
python将2个numpy数组列插入postgresql表作为两个数组.
postgresql表是DOS:
首要的关键
能量整数[]
dos整数[]
我有一个numpy数组,是2x1D数组的2d数组:
finArray = np.array([energy,dos])
我试图使用以下脚本插入数据库,我一直在插入错误.我无法弄清楚如何格式化数组,以便在表单中正确格式化:INSERT INTO dos VALUES(1,'{1,2,3}’,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