2016-07-06 175 views
1

我正在使用psycopg2來執行psql查詢。psycopg2 Python數組操作PostgreSQL查詢

cur.execute("SELECT DISTINCT name FROM product") 
result = cur.fetchall() 
print(result) 

[('product1',), ('product2',), ('product3',), ('product4',)] 

我需要重新格式化這個數組來創建一個API端點。現在它是元組的第二個值爲空的元組列表。迭代的簡單循環可以完成工作。

results=[] 
for item in result: 
    results.append(item[0]) 
print(results) 

['product1','product2','product3','product4'] 

但是這個查詢可能會變得相當大。迭代整個列表會在查詢中增加一個看似不必要的延遲。有沒有辦法使數組在常量時間內變平,還是有一種不同的psycopg2函數能以我需要的格式返回?

回答

1

轉換列表中所需的時間是可以忽略不計相比,數據庫查詢。 但是您不需要直接創建列表:

cur.execute("SELECT DISTINCT name FROM product") 
result = [item for item, in cur] 
print(result) 
1

聚合查詢:

query = ''' 
    select array_agg(distinct name) 
    from product 
''' 
cursor.execute(query) 
rs = cursor.fetchall()[0][0] 
print rs 

輸出:

['product1', 'product2', 'product3', 'product4']