【发布时间】:2020-01-10 16:29:25
【问题描述】:
我正在尝试从 PostgreSQL 获取有关某些摄像机的详细信息,我需要将它们全部插入到一个 JSON 响应中,但我无法想象应该如何完成,因为 for row in self.data: 每次处理一行,如何我可以将它们全部添加到一个 JSON 转储中吗?
我想象 JSON 转储是这样的:
{
"status": "ok",
"total_cameras": 3,
"cameras":[{
"camera_id" : 1,
"camera_name" : "hikvision 1",
"camera_ip": "42.51.56.0"
},
{
"camera_id" : 2,
"camera_name" : "hikvision 2",
"camera_ip": "42.51.56.5"
},
{
"camera_id" : 3,
"camera_name" : "hikvision 3",
"camera_ip": "2.1.58.5"
}]
}
我用来从 PostgreSQL 获取信息的代码:
if not self.Data:
self.RES = {'status': 'nocameras'}
return web.Response(text=json.dumps(self.RES), status=403)
else:
self.rows = self.cursor.rowcount
for row in self.Data:
if self.rows > 1:
# Authorizing objects
print(row)
self.Camera_ID = row[0]
self.Camera_Name = row[1]
self.Camera_LAT = row[3]
self.Camera_LOG = row[4]
self.Camera_IP = row[2]
self.Camera_Last_Updated = row[6]
self.Camera_Street = row[5]
self.Camera_API_key = row[7]
print(self.Camera_ID, self.Camera_Name)
else:
self.RES = {'status': 'row_error'}
return web.Response(text=json.dumps(self.RES), status=500)
【问题讨论】:
-
顺便说一句,我看到很多变量都存储为您的实例的属性(
self.RES、self.rows、self.Camera_ID等),它们可能实际上应该是局部变量.通过将它们存储在self上,您可以保留对所有内容的引用(直到下一次被覆盖),防止垃圾收集完成其工作并弄乱对象名称空间。如果方法返回后不需要变量,使用res = ...、rows = ...等即可。 -
我有 5 个摄像头存储在数据库中,假设 self.Camera_LAT 是纬度,所以它基本上每分钟更改一次,使用此代码,我将所有内容发送到网络服务器以显示所有摄像头在地图中
标签: python json postgresql