zoukankan      html  css  js  c++  java
  • Flask使用Flask-SQLAlchemy操作MySQL数据库

    前言:

    Flask-SQLAlchemy是一个Flask扩展,简化了在Flask程序中使用SQLAlchemy的操作。SQLAlchemy是一个很强大的关系型数据库框架,支持多种数据库后台。SQLAlchemy提供了高层ORM,也提供了使用数据库原生SQL的低层功能。

    学习了Flask-SQLAlchemy下MySQL的配置和增删改查,供初学者作为参考。(python3+flask)


    一、pip安装扩展库

    >>>pip3 install flask-sqlalchemy

    >>>pip3 install flask-mysqldb


    二、配置并初始化数据库

    SQLALCHEMY_DATABASE_URI ,配置使用的数据库URL,而配置MySQL的URL格式为:

    mysql://username:password@hostname/database

    SQLALCHEMY_TRACK_MODIFICATIONS ,设置成True(默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。

     

    三、创建数据库 


    四、定义模型

    1、最常使用的SQLAlchemy列选项

    primary_key    | 如果设为True,这列就是表的主键

    unique           | 如果设为True,这列不允许出现重复的值

    index             | 如果设为True,为这列创建索引,提升查询效率

    nullable          | 如果设为True,这列允许使用空值,False则不允许使用空值

    default           | 为这列定义默认值

    2、一对多关系

    添加到Variable模型中的env_id列被定义为外键,就是这个外键建立起了关系。

    传给db.ForeignKey()的参数'environments.id'表明,这列的值是environments.id表中行的id值。

    3、关系的面向对象视角

    添加到Environments模型中的variable属性代表这个关系的面向对象视角。对于一个Environments类的实例,其variable属性将返回与角色相关联的用户组成的列表。

    db.relationship()的第一个参数表明这个关系的另一端是哪个模型。

    db.relationship()的backref参数向Environments模型中添加一个variable属性,从而定义反向关系。

    db.relationship()的lazy=dynamic参数表明:不加载记录,但提供加载记录的查询。


    五、数据库操作

    1、创建表

    >>> db.create_all()

    2、删除表

    >>> db.drop_all()

    3、插入行

    #将variable添加到会话中

    >>>db.session.add(variable)

    #commit()方法提交会话

    >>>db.session.commit()

    4、 查询数据

    (1)all(查询全部数据)

    Environments.query.all()

    (2)filter_by查询(精确查询)

    Environments.query.filter_by(id=id).first()

    (3)join(联表一对多查询)

    Variable.query.filter_by(env_id=env_id,id=id).join(Environments,Variable.env_id == Environments.id).first_or_404()

    (4)count(返回查询结果的数量)

    Environments.query.filter_by(id=id).count()

    5、删除数据

    db.session.delete(variablelists)

    db.session.commit()

    6、删除多条数据

    variablelists= Variable.query.filter_by(env_id=env_id).all()

    for var in variablelists:

        db.session.delete(var)

    db.session.commit()


    以上,希望对你有所帮助~

  • 相关阅读:
    Java技术体系
    博客开篇
    在Web api2 中传递复杂参数的一点心得
    java内存区域
    nginx负载均衡配置
    nginx反向代理配置
    nginx部署静态网站
    nginx在Centos7.5下源码安装和配置
    Java中的类 serialVersionUID 在序列化的时候有什么用?
    linux开放防火墙端口
  • 原文地址:https://www.cnblogs.com/xiaoxi-3-/p/8026504.html
Copyright © 2011-2022 走看看