TMo*_*aes 0 python sql postgresql dictionary
尝试将此 SELECT 查询转换为 dict,因为我有重复的名称。
def getcity():
conn = databaseConnection()
cur = conn.cursor()
conn.set_client_encoding('LATIN1')
cur.execute("SELECT codcity, name FROM cities")
rows = cur.fetchall()
cities= [dict(row) for row in rows]
return cities
Run Code Online (Sandbox Code Playgroud)
结果:TypeError: cannot convert dictionary update sequence element #0 to a sequence
重复的例子:
Id - 132 | Name: New York
Id - 24 | Name: NEW York
Run Code Online (Sandbox Code Playgroud)
我不确定,但使用 dict 是处理重复情况的最佳方法。我想要的最终结果:
'New York': {
'id-1': 132,
'id-2': 24 }
Run Code Online (Sandbox Code Playgroud)
打印(行[0])
(338, u'')
None
Run Code Online (Sandbox Code Playgroud)
更新:输出(稍微改变行):
<type 'list'>
[(u'Jam', [314]),
(u'Arthur Cat', [527]),
(u'Bel', [406]),
(u'Bel of Taq', [415]),
(u'Good Luck', [420]),
(u'GOOD LUCK', [467]),
(u'Bc do Toto', [407]),
(u'Caera', [322]),
(u'Caira S\xe3o George', [506]),
(u'Grand Good', [373]),
Run Code Online (Sandbox Code Playgroud)
在查询中使用GROUP_CONCAT,将一个城市的所有代码一起作为逗号分隔的字符串,然后在 Python 中将其拆分以创建一个列表。
cur.execute("SELECT name, ARRAY_AGG(codcity) FROM cities GROUP BY name")
rows = cur.fetchall()
cities = {}
for row in rows:
cities[row[0]] = [int(code) for code in row[1].split(',')]
Run Code Online (Sandbox Code Playgroud)
这会将代码放在列表中,而不是字典中,这可能比组成字典键(如 、 等)更好id-1,id-2例如
'New York': [132, 24]
Run Code Online (Sandbox Code Playgroud)