请认为我是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 ]
由于
答案 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)