我正在使用Pytables模块从.mat文件中读取数据。读完数据后,我想用psycopg将这些数据插入数据库。 这是一个示例代码:
file = tables.openFile(matFile)
x = 0
#populate the matData list
for var in dest:
data = file.getNode('/' + var)[:]
matData.append(data)
x = x+1
#insert into db
for i in range(0,x):
cur.execute("""INSERT INTO \"%s\" (%s) VALUES (%s)""" % tableName,dest[i],matData[i]) )
我收到以下错误:
Traceback (most recent call last):
File "./loadDBFromMAT.py", line 111, in <module>
readInputFileAndLoad(args.matFileName,args.tableName)
File "./loadDBFromMAT.py", line 77, in readInputFileAndLoad
cur.execute("INSERT INTO \"%s\" (%s) VALUES (%s)" % (tableName,dest[i],matData[i]) )
psycopg2.ProgrammingError: syntax error at or near "["
LINE 1: INSERT INTO "DUMMY1km" (data) VALUES ([[-3000 -3000 -3000 .....
如果有人能为此建议解决方法,那就太好了。 谢谢!
答案 0 :(得分:1)
INSERT
语句的语法无效。你提到的for循环里面有什么问题。
你应该在问题中加入for循环。
插入“DUMMY1km”(数据)价值([[-3000 -3000 -3000 .....
有效声明可能如下所示 - 假设您的列的类型为integer[]
...您还应该包含在问题中。
INSERT INTO "DUMMY1km"(data) VALUES ('{-3000, -3000}'::int[])
或
INSERT INTO "DUMMY1km"(data) VALUES (ARRAY[-3000, -3000]) -- note the "ARRAY"
或者对于二维数组(看起来有点像错误消息中的那个):
INSERT INTO "DUMMY1km"(data) VALUES ('{{-3000, -3000}, {-3000, -3000}}'::int[])
或
INSERT INTO "DUMMY1km"(data) VALUES (ARRAY[[-3000, -3000],[-3000, -3000]])
手册中的array value input更多内容。
matData [i]需要包含ARRAY[-3000, -3000]
或其他列出的有效语法变体而不是[[-3000 -3000 -3000 ...
,这对整数数组无效。
Psychopg会自动将 PostgreSQL数组转换为 Python列表。构建INSERT时,需要将列表转换回数组。我引自here:
Python lists are converted into PostgreSQL ARRAYs: >>> cur.mogrify("SELECT %s;", ([10, 20, 30], )) 'SELECT ARRAY[10, 20, 30];'
免责声明:我是PostgreSQL的专家,而不是Python。对于比我更了解Python的人来说,相应地格式化字符串应该很容易。我在网上快速研究了上面的引文。