当前位置: 首页 > 工具软件 > flask-peewee > 使用案例 >

学习笔记-第5天-flask-数据库的使用

佟颖逸
2023-12-01


常见的数据库管理系统(DBMS):MySQL SQLite MongoDB
    我们可以把数据库看作一个大仓库,仓库里有一些负责搬运货物的机器人,而DBMS就是操控机器人搬运货物的程序。

    数据库分类:
                SQL:关系型,SQLServer,Oracle,MYSQL,SQLite
                noSQL:非关系型,文档存储(MongoDB,CouchDB),键值对存储(Redis,Riak)
    大型项目一般会混用,比如MySQL存储用户资料和文章,使用Redis缓存数据,使用MongoDB存储实时消息。

    python实现的ORM有SQLAlchemy(最常用),Peewee,PonyORM等

    表-》python的类
    字段(列) >> 类属性
    记录(行) >> 类实例

    常用的数据库URI格式:
        MYSQL: mysql://username:password@host/databasename
        SQLite:sqlite:///absolute\\path\\to\\foo

    1)、连接数据库:设置地址,配置值
        MYSQL: mysql://username:password@host/databasename
        SQLite:sqlite:///absolute\\path\\to\\foo
        app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

    2)、定义数据库模型-->也就是写建表语句-->也就是写一个python类
        字段类型: Integer String Text Data Time DateTime Interval Float Boolean PickleType LargeBinary
        字段参数: primary_key unique index nullable default

        执行生成一个表: db.create_all()

    3)、数据库操作
        C:增
            a:写数据,note = Note(body='this is the first note.')
            b:提交到db session  db.session.add(note)
            c:确认 db.session.commit()
        R:查
            模型类.query.过滤方法.查询方法
            查询方法: all first one get(id) count one_or_none first_or_404 get_or_404 paginate with_parent(instance)
            Note.query.all()

            过滤方法:可叠加使用,filter filter_by order_by limit(limit) group_by offset
            Note.query.filter(Note.body == 'hello').first()
            在filter()方法中,可以用 == != like in not in and or 等
            filter_by可以直接使用字段名称
        U:改
            直接赋值给模型类的字段属性,然后调用commit就行
        D:删
            先调用delete,然后调用commit就行
            为了避免CSRF攻击,像删除这类修改数据的操作绝对不能通过GET请求实现。正确的做法是为删除操作创建一个表单。

    定义关系:  1、 创建外键
                        2、 定义关系属性
    1、一对多:作者和文章  << 优先掌握
        在表示author作者类中添加一个关系属性articles,作为集合属性,当我们对特定的author对象调用articles属性会返回所有相关的article对象。
        第一步、定义外键 foreign key 多的那一方写外键
        第二步、定义关系属性         一的这一方写关系属性,relationship
        第三步、建立关系  --   为外键赋值

        author:relationship(表名)
        article:foreign_key(表名.字段名)
    2、还有其他关系:多对多 多对一 一对一
    3、更新数据库表
        a)、不在乎表数据的情况下,重新生成表:db.drop_all() db.create_all()
        b)、使用Alembic迁移数据库数据,原来的数据留着。
            1)、创建迁移环境    flask db init,在项目根目录下自动创建文件夹migrations
            2)、生成迁移脚本    flask db migrate -m 'edit note table'。会有一个新文件migrations/versions/c343_fjidefkfsdfds.py。最好检查一下正确性
            3)、更新数据库 flask db upgrade

总结:实践出真知!写出博客增删改查,以检验上述理论知识。

 类似资料: