gpt4 book ai didi

python - 为什么 SQLalchemy create_all() 可以重复使用?

转载 作者:IT王子 更新时间:2023-10-29 06:24:59 77 4
gpt4 key购买 nike

我对数据库和 SQLalchemy/sqlite3 的背景知识知之甚少,但我对这些的实验告诉我,create_all() 几乎可以像“如果数据库已经存在则初始化数据库”一样使用。

这是我写的 flask webapp 的“表单提交”部分:

db = SQLAlchemy(app)
@app.route('/submit', methods=['POST'])
def submit():
form = UserForm(request.form)
if request.method == 'POST':
new_entry = User(form.username.data,
form.password.data)
db.create_all()
add_entry(new_entry)

db.create_all() 应该创建一个本地 .db 文件。如果我已经有了那个文件,并且我向表单提交了新数据,发生的事情是 new_entry 被附加到数据库表而不是覆盖 .db 文件。任何人都可以确认这个结果是预期的吗?如果实现不当,处理数据库初始化的更好方法是什么?

最佳答案

create_all 实际上只创建 do not exist 的表.它不是用于迁移,而是用于在空数据库中创建初始结构。

你想要alembic用于迁移,可能通过 Flask-Migrate


除此之外,在您的 Flask 应用程序的面向 Web 的部分中包含任何与数据库结构相关的代码都是值得怀疑的。通常你在命令行工具中做这些事情(通过 Flask-Script 或点击),例如python manage.py create_db.

我不同意您“执行不力”的观点。它的实现方式可以阻止您做错(并且可能是危险的)事情。假设您重命名了一个列。 “智能”create_all 会删除旧列(毕竟它已经消失了)并创建一个新列 - 任何工具都不可能知道您重命名了它而不是删除和添加一个。

关于python - 为什么 SQLalchemy create_all() 可以重复使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34807235/

77 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com