psycopg2:将一个numpy字符串数组插入PostgreSQL表

时间:2014-08-19 11:57:03

标签: python mysql arrays database postgresql

请认为我是psycopg2的完整新手。我的目标是将一个dtype对象(其中元素只是字符串)的一维numpy数组插入到postgresQL表中。我的主程序将字段保存为numpy数组中的字符串。然后我想将每个单独的元素添加到postgresqL表中的一列(或者如果您愿意,1d数组是一行)。请注意,实际阵列有36个元素!我需要一种方法将它们全部放入。

我正在使用cur.execute命令,虽然我认为字符串转换存在一些问题。

Array=np.empty(3,dype=object)
Array[0]='Hello'
Array[1]='Tea?'
Array[2]='Bye'

statement= "INSERT INTO testlog (field1,field2,field3) VALUES (%s)" #Etc.
cur.execute(statement,Array)

我收到错误:

cur.execute(statement,Array)
TypeError: not all arguments converted during string formatting

也尝试过:

cur.executemany('INSERT INTO testlog VALUES ( %s )', [[v] for v in Array ]

由于

1 个答案:

答案 0 :(得分:0)

您的陈述应包含所有值的占位符:

statement= "INSERT INTO testlog (field1,field2,field3) VALUES (%s, %s, %s)"

例如:

=# create table testlog (field1 varchar(50), field2 varchar(50), field3 varchar(50))`;

然后在python shell中(注意dtype而不是dype

Array=np.empty(3,dtype=object)
Array[0]='Hello'
Array[1]='Tea?'
Array[2]='Bye'
sql = "INSERT INTO testlog (field1, field2, field3) VALUES (%s, %s, %s)"
cur.execute(sql, [f for f in Array])
conn.commit()

在DB中:

select * from testlog;
 field1 | field2 | field3 
--------+--------+--------
 Hello  | Tea?   | Bye
(1 row)