瓶中更新数据库的方法

  介绍

这篇文章主要介绍了瓶中更新数据库的方法,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。

更新数据库库表

模型类(表)不是一成不变的,当你添加了新的模型类,或是在模型类中添加了新的字段,甚至是修改了字段的名称或类型,都需要更新表。在前面我们把数据库表比成盛放货物的货架,这些货架是固定生成的。当我们在操控程序(DBMS/ORM)变更了货架的结构时,仓库的货架也要根据变化相应进行调整。而且,当货架的结构产生变动时,我们还需要考虑如何处理货架上的货物(数据)。

当你在数据库的模型中添加了一个新的字段后,比如在注模型里添加了一个存储笔记创建时间的时间戳字段。

class 注意(db.Model):   ,,,id =, db.Column (db.Integer, primary_key=True),,,, timeStamp =, db.Column (db.String(70),独特的=True)   ,,,body =, db.Column (db.Text),,,, def  __repr__(自我):,,,,,,,,#,% r是用repr()方法处理对象,返回类型本身,而不进行类型转化   ,,,,,,,return  & # 39; & lt; Note  % r> & # 39; %,自我。身体

此时模型类的定义中,加入了一个新的列,在命令行界面初始化数据时,只给了身体赋了值,此时访问这个表的数据时,这条数据有一个字段没有初始化,就是表的结构变化了,需要更新这个表结构,才能正常访问。

这时在命令行里查看注意表的字段时,会看到报错:

在祝辞祝辞,Note.query.all ()   sqlalchemy.exc.OperationalError:, (sqlite3.OperationalError), no  such 专栏:note.timeStamp   [SQL:, SELECT  note.id  AS  note_id,,注意干净timeStamp", AS “note_timeStamp",, note.body  AS  note_body   得到注意]

这段错误信息支出注意表中没有时间戳列,并在中括号里给出了查询所对应的SQL原语,之所以会出的错,是因为数据库并不会随着模型的修改而自动更新。就像之前关于仓库的比喻,仓库里来了一批新类型的货物,可我们还没为他们安排响应的货架,这当然要出凑了,下面学习如果更新数据库。

<强>重新生成表

重新调用create_all()方法并不会起到更新表或重新创建表的作用。如果你并不在意表中的数据,最简单的方法是使用drop_all()方法删除表以及其中的数据,然后再使用create_all()方法重新创建:

在祝辞祝辞,db.drop_all ()   在祝辞祝辞,db.create_all ()

这会清除数据库里的原有数据,请勿在生产环境下使用。

为了方便开发,我们修改initdb命令函数的内容,为其增加一个下降选项来支持删除表和数据库后进行重建,如下所示:

应用程序。py:支持删除表后重建

@app.cli.command ()   @click.option(& # 39;——下降# 39;,,is_flag=True,,帮助=& # 39;Create  after 下降# 39;)def  initdb(下降):,,,,“““Initialize 从而数据库!”,“   ,,,if 下降:   ,,,,,,,click.confirm(& # 39;却;能够operation  will  delete 从而数据库,do 你want 用继续? & # 39;,,abort =,真的)   ,,,,,,,db.drop_all ()   ,,,,,,,click.echo (& # 39; Drop 表# 39;公司)   ,,,db.create_all ()   ,,,click.echo (& # 39; Initialized 数据库# 39;公司)

在这个命令函数前,我们使用点击提供的选择装饰器为命令添加了一个下降选项,将is_flag参数设为真实可以将这个选项声明为布尔值标志(布尔标志),降低选项的值作为降低参数传入命令函数,如果提供了这个选项,那么的下降值将是真的,否则为假,因为添加滴选项会直接清空数据库内容,如果需要,也可以通过click.confirm()函数添加一个确认提示,这样只有输入y或是的才会继续执行操作。

下面来用这个命令重建数据库和表:

(Lenovo-ezd1lI9Y), D: \瓶\ FLASK_PRACTICE \ DataBase> flask  initdb ——dropThis  operation  will  delete 从而数据库,,   do 你;want 用继续?,[y/N]: y   Drop 表。   Initialized 数据库。

感谢你能够认真阅读完这篇文章,希望小编分享烧瓶中更新数据库的方法内容对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,遇到问题就找,详细的解决方法等着你来学习!

瓶中更新数据库的方法