英文:
Unable to create database when running flask app
问题
当我调用 python run.py 时,db.create_all() 函数会执行。但是当我调用 flask --app market run 或 flask --app run.py run 时,db.create_all() 不会执行。请解释为什么会发生这种情况?
英文:
I'm new to flask and I got stuck into one thing. So I have run.py file inside it
from market import app
from market.models import db
if __name__ == "__main__":
with app.app_context():
db.create_all()
app.run(debug=True)
so when I call python run.py the db.create_all() function works. But when I call flask --app market run or flask --app run.py run the db.create_all() doesn't get executed.
Please explain why this happens ?
答案1
得分: 2
当你运行python run.py时,run.py内部的__name__的值是__main__。这就是为什么if __name__ == "__main__"条件成立,然后执行db.create_all()。
当你不直接执行你的主脚本,而是使用flask命令行工具来运行时,run.py文件中的__name__的值等于你的文件名。因此,你的条件为假,db.create_all()不会被执行。
此外,__name__是Python中的一个特殊内置变量,它提供了当前模块的名称。查看这个答案以了解更多信息:https://stackoverflow.com/questions/419163/what-does-if-name-main-do
英文:
When you run python run.py, then the value of __name__ inside your run.py is __main__. That's why if __name__ == "__main__" condition satisfies and db.create_all() executed.
When you don't execute your main script directly but with flask cli, the value of the __name__ in run.py file is equal to your file name. So your if condition is false and db.create_all() is not executed.
In addition, __name__ is a special built-in variable in python that provides the name of the current module. Check this answer to learn more about it https://stackoverflow.com/questions/419163/what-does-if-name-main-do
答案2
得分: 2
我已找到答案。执行FLASK_APP=run.py导出,然后运行flask --app run.py run即可正常运行。
英文:
I have figured out the answer. Do export FLASK_APP=run.py , then running flask --app run.py run runs perfectly.
答案3
得分: 1
flask --app run.py run不会执行ifmain块的内容,包括db.create_all()。
您可以/应该将with app.app_context(): db.create_all()移出ifmain。
英文:
flask --app run.py run does not execute the contents of your ifmain block, including the db.create_all().
You can/should move the with app.app_context(): db.create_all() out of the ifmain.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论