Ben*_*ott 5 python postgresql uuid psycopg2 type-conversion
我有一个 SQL 语句,它包含一个嵌入在ARRAY()这样的子查询中:
SELECT foo, ARRAY(SELECT x from y) AS bar ...
Run Code Online (Sandbox Code Playgroud)
查询工作正常,但是在 psycopg2 结果游标中,数组作为字符串返回(如"{1,2,3}"),而不是列表。
我的问题是,将这些字符串转换为 python 列表的最佳方法是什么?
它适用于我而无需解析:
import psycopg2
query = """
select array(select * from (values (1), (2)) s);
"""
conn = psycopg2.connect('dbname=cpn user=cpn')
cursor = conn.cursor()
cursor.execute(query)
rs = cursor.fetchall()
for l in rs:
print l[0]
cursor.close()
conn.close()
Run Code Online (Sandbox Code Playgroud)
执行时的结果:
$ python stackoverflow_select_array.py
[1, 2]
Run Code Online (Sandbox Code Playgroud)
您需要注册 uuid 类型:
import psycopg2, psycopg2.extras
query = """
select array(
select *
from (values
('A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11'::uuid),
('A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11'::uuid)
)s
);
"""
psycopg2.extras.register_uuid()
conn = psycopg2.connect('dbname=cpn user=cpn')
cursor = conn.cursor()
cursor.execute(query)
rs = cursor.fetchall()
for l in rs:
print l[0]
cursor.close()
conn.close()
Run Code Online (Sandbox Code Playgroud)
结果:
$ python stackoverflow_select_array.py
[UUID('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11'), UUID('a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11')]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4506 次 |
| 最近记录: |