python - 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/.
任何想法如何解决这个问题?
解决方案
首次创建表时向表中添加数据的正确方法如下
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
函数以使用您想要的数据填充表。
推荐阅读
- javascript - 如何在 dropzone.js 中将多个文件附加到 formdata
- java - 从非自动实例化类中的属性设置静态变量
- authentication - PingIdentity:配置 SAML 连接:您的更改无法保存
- angular - single-spa-angular 当我们刷新浏览器时,微前端应用程序中的多个路由不起作用(GitHub 代码可用)
- python - `ModuleNotFoundError: No module named 'psutil'` 导入 psutil 模块时
- azure-application-insights - 从 NLog 发送时,Application Insights 数据是否会被采样?
- javascript - 在表单中渲染一个 button[type="submit"] 触发 onSubmit 回调
- mariadb - MariaDB 测量值 JSON_EXTRACT
- bash - 使 Deno 脚本全球可用
- pandas - 如何在单个 CSV 中表示标准化数据