如何在psycopg2中返回列表而不是元组

时间:2015-12-16 08:49:09

标签: python list postgresql numpy psycopg2

我有以下查询

    cursor.execute(
    """
    SELECT transform(row_to_json(t)) FROM 
        (select * from table 
         where a = %s 
         and b = %s limit 1000) t;
    """
    , (a_value, b_value))

运行records = cursor.fetchall()将返回一个大小为1元组的列表。

无论如何只返回一个列表列表?

我问这个是因为我想将列表列表转换为numpy矩阵,并且循环将单例元组转换为列表很慢。

3 个答案:

答案 0 :(得分:8)

当一行多时,可以使用以下代码

const blob = new Blob([JSON.stringify(parsedData)], {type: 'application/json'});
const url = URL.createObjectURL(blob);
const a = Object.assign(document.createElement('a'), {download: 'new.json', href: url});
document.body.appendChild(a);
a.click();

答案 1 :(得分:3)

作为快速修复,您可以返回一个数组:

cursor.execute("""
    select array_agg(transform(row_to_json(t)))
    from (
        select * from table 
        where a = %s and b = %s
        limit 1000
    ) t;
""", (a_value, b_value))

由于Psycopg将Postgresql数组调整为Python列表,因此只需获取该列表:

records = cursor.fetchall()[0][0]

我想有可能将cursor子类化为返回列表而不是元组,但如果你不处理庞大的集合,我认为这不值得麻烦。

答案 2 :(得分:1)

您也可以使用此代码

result = cur.fetchall()
x = map(list, list(result))
x = sum(x, [])