问题
代码执行到这一行报错
报错信息
C:\Users\liushan\PycharmProjects\untitled\venv\Scripts\python.exe C:/Users/liushan/PycharmProjects/untitled/flash/interface/case_server.py
- Serving Flask app ‘case_server’ (lazy loading)
- Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead. - Debug mode: on
- Restarting with stat
- Debugger is active!
- Debugger PIN: 836-695-929
- Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
127.0.0.1 - - [15/Nov/2022 17:05:03] “GET / HTTP/1.1” 200 -
127.0.0.1 - - [15/Nov/2022 17:05:03] “GET /swaggerui/droid-sans.css HTTP/1.1” 304 -
127.0.0.1 - - [15/Nov/2022 17:05:03] “GET /swaggerui/swagger-ui.css HTTP/1.1” 304 -
127.0.0.1 - - [15/Nov/2022 17:05:03] “GET /swaggerui/swagger-ui-bundle.js HTTP/1.1” 304 -
127.0.0.1 - - [15/Nov/2022 17:05:03] “GET /swaggerui/swagger-ui-standalone-preset.js HTTP/1.1” 304 -
127.0.0.1 - - [15/Nov/2022 17:05:03] “GET /swagger.json HTTP/1.1” 200 -
127.0.0.1 - - [15/Nov/2022 17:05:03] “GET /swaggerui/favicon-32x32.png HTTP/1.1” 200 -
<class ‘str’>
127.0.0.1 - - [15/Nov/2022 17:05:12] “GET /case?id=1 HTTP/1.1” 500 -
Traceback (most recent call last):
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\sqlalchemy\util_collections.py”, line 1008, in call
return self.registry[key]
KeyError: <greenlet.greenlet object at 0x000002C509B3DAC8 (otid=0x000002C509AB0F30) current active started main>
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask\app.py”, line 2091, in call
return self.wsgi_app(environ, start_response)
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask\app.py”, line 2076, in wsgi_app
response = self.handle_exception(e)
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask_restx\api.py”, line 674, in error_router
return original_handler(f)
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask_restx\api.py”, line 672, in error_router
return self.handle_error(e)
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask\app.py”, line 2073, in wsgi_app
response = self.full_dispatch_request()
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask\app.py”, line 1518, in full_dispatch_request
rv = self.handle_user_exception(e)
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask_restx\api.py”, line 674, in error_router
return original_handler(f)
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask_restx\api.py”, line 672, in error_router
return self.handle_error(e)
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask\app.py”, line 1516, in full_dispatch_request
rv = self.dispatch_request()
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask\app.py”, line 1502, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask_restx\api.py”, line 405, in wrapper
resp = resource(*args, **kwargs)
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask\views.py”, line 84, in view
return current_app.ensure_sync(self.dispatch_request)(*args, **kwargs)
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask_restx\resource.py”, line 46, in dispatch_request
resp = meth(*args, **kwargs)
File “C:\Users\liushan\PycharmProjects\untitled\flash\interface\case_server.py”, line 26, in get
case_data = TestCase.query.filter_by(id = case_id).first()
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask_sqlalchemy_init_.py”, line 552, in get
return type.query_class(mapper, session=self.sa.session())
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\sqlalchemy\orm\scoping.py”, line 47, in call
sess = self.registry()
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\sqlalchemy\util_collections.py”, line 1010, in call
return self.registry.setdefault(key, self.createfunc())
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\sqlalchemy\orm\session.py”, line 4274, in call
return self.class_(**local_kw)
File “C:\Users\liushan\PycharmProjects\untitled\venv\lib\site-packages\flask_sqlalchemy_init_.py”, line 175, in init
track_modifications = app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS’]
KeyError: ‘SQLALCHEMY_TRACK_MODIFICATIONS’
环境
源码
import json
from flask import Flask, request
from flask_restx import Namespace, Resource, Api
from api_object.until.log_until import logger
from flash.case_db.case_sql import *
app = Flask(__name__)
api = Api(app)
case_ns = Namespace("case", description="用例管理")
@case_ns.route("")
class CaseServer(Resource):
get_parser = api.parser()
get_parser.add_argument('id',type= int,location = 'args')
@case_ns.expect(get_parser)
def get(self):
"""
测试用例的查找
:return:
"""
case_id = request.args.get('id')
print(type(case_id))
if case_id:
case_data = TestCase.query.filter_by(id = case_id).first()
if case_data:
datas = [
{
'id':case_data.id,
'case_title':case_data.case_title,
'remark':case_data.remark
}
]
else:
datas = []
else:
case_datas = TestCase.query.all()
datas = [{'id':case_data.id,'case_title':case_data.case_title,'remark':case_data.remark}for case_data in case_datas]
logger.info(f"返回数据为{datas}")
return datas
post_parse = api.parser()
post_parse.add_argument("id", type=int, location='json', required=True)
post_parse.add_argument("cast_title", type=str, location='json', required=True)
post_parse.add_argument("remark", type=str, location='json')
@case_ns.expect(post_parse)
def post(self):
"""
测试用例的新增
:return:
"""
#获取请求的参数
case_data = request.json
print(case_data)
case_id = case_data.get("id")
print(case_id)
exist = TestCase.query.filter_by(id = case_id).frist()
print(exist)
if not exist:
#创建数据库实例
testcase = TestCase(**case_data)
db.session.add(testcase)
db.session.commit()
logger.info(f"将要返回的内容{testcase}")
return {'code':0,"msg":f"case id {case_id} success add"}
else:
return {"code": 400001, "msg": f"case id {case_id} is exit"}
put_parser = api.parser()
put_parser.add_argument('id',type = int,location = 'json',required = True)
put_parser.add_argument('case_title',type = str , location = 'json',required = True)
put_parser.add_argument('remark',type = str ,location = 'json')
@case_ns.expect(put_parser)
def put(self):
"""
测试用例的修改
:return:
"""
case_data = request.json
case_id = case_data.get('id')
exist = TestCase.query.filter_by(id = case_id).first()
print(f'put{exist}')
if exist:
case_data['case_title'] = json.dumps(case_data.get('case_title'))
TestCase.query.filter_by(id = case_id).update(case_data)
db.session.commot()
return {"code": 0, "msg": f"{case_id}put success"}
else:
return {"code": 40002, "msg": "case is not exist"}
delect_parser = api.parser()
delect_parser.add_argument('id',type = int ,location = 'json',required = True)
@case_ns.expect(delect_parser)
def delete(self):
"""
测试用例的修改
:return:
"""
case_data = request.json
case_id = case_data.get('id')
exist = TestCase.query.filter_by(id = case_id).first()
if exist:
TestCase.query.filter_by(id = case_id).delete()
db.session.commit()
return {"code": 0, "msg": f"Case id {case_id}delete success"}
else:
return {"code": 40002, "msg": "case is not exist"}
api.add_namespace(case_ns,'/case')
if __name__ == '__main__':
app.run(debug=True)
case_sql.py
import yaml
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.orm import Query
from sqlalchemy import *
app = Flask(__name__)
data = yaml.safe_load(open('../data/db.yaml'))
username = data['database']['username']
password = data['database']['password']
server = data['database']['server']
database = data['database']['db']
app.config["SQLALCHEMY_DATABASE_URI"] = f"mysql+pymysql://{username}:{password}@{server}/{database}?charset=utf8"
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
#将app与Flask-SQLAlchemy 的db进行绑定
db = SQLAlchemy(app)
# 用例表
class TestCase(db.Model):
__tablename__ = "testcase"
# 用例ID,用例的唯一标识
id = db.Column(Integer, primary_key=True)
# 用例的标题或者文件名
case_title = db.Column(String(80), unique=True, nullable=False)
# 备注
remark = db.Column(String(120))
if __name__ == '__main__':
db.create_all()
a= TestCase.query.filter_by(id=1).first()
print(a)