英文:
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.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论