将pgsql int数组转换为python数组

时间:2016-10-03 18:02:43

标签: python arrays postgresql psycopg2

我将数据数据(int)存储在pgsql中作为数组。对于图像中的矩形,这些是x,y,w,h,例如{(248,579),(1,85)}

当读取我的python代码(使用psycopg)时,我将其作为字符串(?)。我现在正在尝试从该字符串中找到获取python数组的最佳方法。 有没有比将字符串拆分为更好的方法,''等等...

P.S。我确实尝试了.astype(int)构造,但在这种情况下不会起作用。

2 个答案:

答案 0 :(得分:1)

假设您无法更改输入格式,您可以删除所有不需要的字符,然后拆分,或执行相反的顺序。

data = '{(248,579),(1,85)}'
data.translate(None, '{}()').split(',')

会给你一个字符串列表。

[int(x) for x in data.translate(None, '{}()').split(',')]

也会将它们翻译成整数。

答案 1 :(得分:0)

如果你的意思是矩形作为点数组存储在Postgresql中:

query = '''
    select array[(r[1])[0],(r[1])[1],(r[2])[0],(r[2])[1]]::int[]
    from (values ('{"(248,579)","(1,85)"}'::point[])) s (r)
'''

cursor.execute(query)
print cursor.fetchone()[0]

返回Python int列表

[248, 579, 1, 85]

请注意,默认情况下,Postgresql数组的基数为1时,Point坐标将被检索为基数为0的数组。