如何将numpy数组转换为postgresql列表

我试图使用
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

点赞