database_edit.py
3.4 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
101
# coding=utf-8
#author: 4N
#createtime: 2021/3/9
#email: nheweijun@sina.com
from ..models import Database,db,DES
from contextlib import closing
from sqlalchemy import create_engine
import datetime
from . import database_alias_check
from app.util.component.ApiTemplate import ApiTemplate
from app.util.component.UserCheck import UserCheck
from app.util.component.PGUtil import PGUtil
class Api(ApiTemplate):
api_name = "修改数据库"
def process(self):
res = {}
res["result"] = False
try:
guid = self.para.get("guid")
alias = self.para.get("alias")
passwd = self.para.get("passwd")
database = Database.query.filter_by(guid=guid)
dbase:Database = database.one_or_none()
#验证权限
UserCheck.verify(dbase.creator)
update_dict={}
if not dbase:
res["msg"] = "数据库不存在!"
return res
if not alias and not passwd:
res["msg"] = "请填写参数!"
return res
if alias:
# 检测一波别名
check_alias = database_alias_check.Api().result
if not check_alias["result"]:
return check_alias
update_dict["alias"]=alias
if passwd:
try:
user, password, host, port, database = PGUtil.get_info_from_sqlachemy_uri(DES.decode(dbase.sqlalchemy_uri))
sqlalchemy_uri = "postgresql://{}:{}@{}:{}/{}".format(user, passwd,host,
port, database)
connectsrt = "hostaddr={} port={} dbname='{}' user='{}' password='{}'".format(host, port, database, user,
passwd)
engine = create_engine(sqlalchemy_uri, connect_args={'connect_timeout': 2})
with closing(engine.connect()):
pass
except :
res["msg"] = "密码错误!"
return res
update_dict["sqlalchemy_uri"]= DES.encode(sqlalchemy_uri)
update_dict["connectstr"] = DES.encode(connectsrt)
if update_dict:
update_dict["update_time"]=datetime.datetime.now()
Database.query.filter_by(guid=guid).update(update_dict)
db.session.commit()
res["result"] = True
res["msg"] = "数据修改成功!"
except Exception as e:
db.session.rollback()
raise e
return res
api_doc={
"tags":["数据库接口"],
"parameters":[
{"name": "guid",
"in": "formData",
"type": "string"},
{"name": "alias",
"in": "formData",
"type": "string","description":"数据库别名"},
{"name": "passwd",
"in": "formData",
"type": "string", "description": "数据库密码"}
],
"responses":{
200:{
"schema":{
"properties":{
}
}
}
}
}