gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:53 29 4
gpt4 key购买 nike

我正在尝试使用 python 将 numpy 数组的 2 列作为两个数组插入到 postgresql 表中。

postgresql 表是 DOS:首要的关键能量整数[]整数[]

我有一个 numpy 数组,它是 2x1D 数组的二维数组:

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...

我不知道括号中的内部 ' ' 是从哪里来的。

最佳答案

太晚了,但还是把它放出来了。

我今天试图将一个 numpy 数组插入到 Redshift 中。在尝试了 ododf.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()

第二行需要根据数组的维度做一些工作。

您可能还想检查这些答案:

  1. Converting from numpy array to tuple
  2. Multiple row inserts in psycopg2

关于python - 如何将 numpy 数组转换为 postgresql 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23557537/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com