最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • flask如何更新数据库

    正文概述    2020-03-20   337

    flask如何更新数据库

    更新数据库库表

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

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

    class Note(db.Model):
        id = db.Column(db.Integer, primary_key=True)    timeStamp = db.Column(db.String(70), unique=True)
        body = db.Column(db.Text)    def __repr__(self):        # %r是用repr()方法处理对象,返回类型本身,而不进行类型转化
            return '<Note %r>' % self.body

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

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

    >>> Note.query.all()
    sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such column: note.timeStamp
    [SQL: SELECT note.id AS note_id, note."timeStamp" AS "note_timeStamp", note.body AS note_body
    FROM note]

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

    重新生成表

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

    >>> db.drop_all()
    >>> db.create_all()

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

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

    app.py: 支持删除表后重建

    @app.cli.command()
    @click.option('--drop', is_flag=True, help='Create after drop')def initdb(drop):    """Initialize the database."""
        if drop:
            click.confirm('This operation will delete the database, do you want to continue?', abort = True)
            db.drop_all()
            click.echo('Drop tables.')
        db.create_all()
        click.echo('Initialized database.')

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

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

    (Lenovo-ezd1lI9Y) D:\flask\FLASK_PRACTICE\DataBase>flask initdb --dropThis operation will delete the database, 
    do you want to continue? [y/N]: y
    Drop tables.
    Initialized database.

    起源地下载网 » flask如何更新数据库

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元