将 pgsql int 数组转换为 python 数组

convert pgsql int array into python array

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

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

p.s。我确实尝试了 .astype(int) 构造,但在这种情况下行不通。

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

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

会给你一个字符串列表。

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

也会将它们转换为整数。

如果您的意思是矩形作为点数组存储在 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]

Returns 一个 Python 整数列表

[248, 579, 1, 85]

请注意,虽然 Postgresql 数组默认以 1 为基数,但检索 Point 坐标作为以 0 为基数的数组。