Python 使用值初始化数据库

Python 使用值初始化数据库,python,api,web,flask,sqlalchemy,Python,Api,Web,Flask,Sqlalchemy,我有一个简单的问题。当我运行flask应用程序时,我想直接向数据库添加一个初始值,如下所示 if __name__ == '__main__': db.init_app(app) with app.app_context(): db.create_all() user = UserModel.find_by_name('user') if not user: user = UserModel('name', 'password')

我有一个简单的问题。当我运行flask应用程序时,我想直接向数据库添加一个初始值,如下所示

if __name__ == '__main__':
    db.init_app(app)
    with app.app_context():
        db.create_all()

    user = UserModel.find_by_name('user')
    if not user:
        user = UserModel('name', 'password')
        user.save_to_db()
    app.run() 
这样做会导致以下错误:

Traceback (most recent call last):
  File "C:\Users\Jeffrey T\Documents\2019_2023UPenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\venv\lib\site-packages\sqlalchemy\util\_collections.py", line 1020, in __call__
    return self.registry[key]
KeyError: 48452

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/Jeffrey T/Documents/2019_2023UPenn/PennLabs/ChallengeSpr2020/PennLabsServerChallengeSpr2020/index.py", line 18, in <module>
    jen = UserModel.find_by_name('jen')
  File "C:\Users\Jeffrey T\Documents\2019_2023UPenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\models\user.py", line 54, in find_by_name
    return cls.query.filter_by(username=username).first()
  File "C:\Users\Jeffrey T\Documents\2019_2023UPenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 514, in __get__
    return type.query_class(mapper, session=self.sa.session())
  File "C:\Users\Jeffrey T\Documents\2019_2023UPenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\venv\lib\site-packages\sqlalchemy\orm\scoping.py", line 78, in __call__
    return self.registry()
  File "C:\Users\Jeffrey T\Documents\2019_2023UPenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\venv\lib\site-packages\sqlalchemy\util\_collections.py", line 1022, in __call__
    return self.registry.setdefault(key, self.createfunc())
  File "C:\Users\Jeffrey T\Documents\2019_2023UPenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\venv\lib\site-packages\sqlalchemy\orm\session.py", line 3286, in __call__
    return self.class_(**local_kw)
  File "C:\Users\Jeffrey T\Documents\2019_2023UPenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 136, in __init__
    self.app = app = db.get_app()
  File "C:\Users\Jeffrey T\Documents\2019_2023UPenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\venv\lib\site-packages\flask_sqlalchemy\__init__.py", line 987, in get_app
    raise RuntimeError(
RuntimeError: No application found. Either work inside a view function or push an application context. See http://flask-sqlalchemy.pocoo.org/contexts/.

回溯(最近一次呼叫最后一次):
文件“C:\Users\Jeffrey T\Documents\2019_2023; upenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\venv\lib\site packages\sqlalchemy\util\\ u collections.py”,第1020行,在调用中__
返回self.registry[项]
密钥错误:48452
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“C:/Users/Jeffrey T/Documents/2019_2023; upenn/PennLabs/ChallengeSpr2020/PennLabsServerChallengeSpr2020/index.py”,第18行,在
jen=UserModel。通过名称(“jen”)查找
文件“C:\Users\Jeffrey T\Documents\2019_2023; upenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\models\user.py”,第54行,按名称查找
返回cls.query.filter_by(username=username).first()
文件“C:\Users\Jeffrey T\Documents\2019\U 2023UPenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\venv\lib\site packages\flask\u sqlalchemy\\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu__
返回类型.query\u类(映射器,session=self.sa.session())
文件“C:\Users\Jeffrey T\Documents\2019_2023; upenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\venv\lib\site packages\sqlalchemy\orm\scoping.py”,第78行,在调用中__
返回self.registry()
文件“C:\Users\Jeffrey T\Documents\2019_2023; upenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\venv\lib\site packages\sqlalchemy\util\\ u collections.py”,第1022行,在调用中__
返回self.registry.setdefault(项,self.createfunc())
文件“C:\Users\Jeffrey T\Documents\2019_2023; upenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\venv\lib\site packages\sqlalchemy\orm\session.py”,第3286行,在_u调用中__
返回自功率等级(**本地功率)
文件“C:\Users\Jeffrey T\Documents\2019_2023; upenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\venv\lib\site packages\flask\u sqlalchemy\\ uuuuuuuuuuuuuuuuuuu init.py”,第136行,在uuuuuuuuuu init中__
self.app=app=db.get_app()
文件“C:\Users\Jeffrey T\Documents\2019_2023; upenn\PennLabs\ChallengeSpr2020\PennLabsServerChallengeSpr2020\venv\lib\site packages\flask\u sqlalchemy\\uuuuu init\uuuuuuuuuuuuuuuu.py”,第987行,在get\u应用程序中
引发运行时错误(
RuntimeError:找不到应用程序。请在视图函数内工作或推送应用程序上下文。请参阅http://flask-sqlalchemy.pocoo.org/contexts/.

有没有办法解决这个问题?

第一次创建表时,向表中添加数据的正确方法如下

from sqlalchemy import event
# import your initialized db
from app import db

class Department(db.Model):
    __tablename__ = 'department'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), index=True, unique=True)
    email = db.Column(db.String(64), index=True)

@event.listens_for(Department.__table__, 'after_create')
def create_departments(*args, **kwargs):
    db.session.add(Department(name='Customer Service', email='abc@domain.com'))
    db.session.add(Department(name='IT', email='def@domain.com'))
    db.session.commit()

第一次在您的配置设置序列中运行
db.create_all()
时,它将创建您的数据库架构,并触发
create_departments
函数,用您想要的数据填充表格。

您的应用程序是什么?请给我们更多解释