table_view.py
3.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#author: 4N
#createtime: 2021/1/27
#email: nheweijun@sina.com
import datetime
from ..models import Table,Database,DES
from sqlalchemy.engine import ResultProxy
from app.util.component.ApiTemplate import ApiTemplate
from app.util.component.PGUtil import PGUtil
import json
import decimal
class Api(ApiTemplate):
api_name = "数据浏览"
def process(self):
res = {}
res["data"] = {}
db_session=None
try:
table_guid = self.para.get("guid")
limit = int(self.para.get("limit",50))
offset = int(self.para.get("offset", 0))
table :Table= Table.query.filter_by(guid=table_guid).one_or_none()
if not table:
raise Exception("数据不存在!")
database:Database = table.relate_database
db_session = PGUtil.get_db_session(DES.decode(database.sqlalchemy_uri))
geom_col = PGUtil.get_geo_column(table.name,db_session)
query_result : ResultProxy = db_session.execute('select * from "{}" limit {} offset {}'.format(table.name,limit,offset))
res["data"]["count"]=PGUtil.get_table_count(table.name,db_session)
res["data"]["count"] = table.feature_count
pkey = PGUtil.get_pkey(table.name,db_session)
res["data"]["list"]=[]
for row_proxy in query_result:
pkey_dict = {}
d = {}
for column, value in row_proxy.items():
#跳过空间列
if geom_col:
if column.__eq__(geom_col):
continue
if pkey:
if column == pkey:
pkey_dict[column]=value
continue
#格式化时间列
if isinstance(value, datetime.datetime):
d[column] = value.strftime('%Y-%m-%d %H:%M:%S')
elif isinstance(value, decimal.Decimal):
d[column] = float(value)
elif isinstance(value,datetime.date):
d[column] = value.strftime('%Y-%m-%d %H:%M:%S')
else:
d[column]=value
pkey_dict.update(d)
res["data"]["list"].append(pkey_dict)
res["result"]=True
except Exception as e:
raise Exception("数据库连接失败!")
finally:
if db_session:
db_session.close()
return json.dumps(res,ensure_ascii=False)
api_doc={
"tags":["管理接口"],
"parameters":[
{"name": "guid",
"in": "formData",
"type": "string",
"description": "表guid","required":"true"},
{"name": "limit",
"in": "formData",
"type": "int"
},
{"name": "offset",
"in": "formData",
"type": "int"},
],
"responses":{
200:{
"schema":{
"properties":{
}
}
}
}
}