sqlalchemy 调用 不能执行 这是为什么 ,debug到这一行不能执行 就报错500

问题

代码执行到这一行报错

报错信息

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)

有远程不 我看看

怎么远程呀
qq嘛

todesk或者向日葵都可以的

你的代码没格式化。

我格式化后发现你实例化了两个app

你可以把api里边的实例化去掉,因为你已经导入了sql文件里的app了