美文网首页Web开发——Flask框架Python待用
Flask框架——数据库操作(增删改查)

Flask框架——数据库操作(增删改查)

作者: 白巧克力LIN | 来源:发表于2022-07-16 13:08 被阅读0次

    上篇文章我们学习了Flask框架——数据库配置及迁移同步,这篇文章我们学习Flask框架——数据库操作命令(增删改查)。

    首先我们创建一个Flask项目,其目录如下所示:



    配置文件settings.py代码如下所示:

    class Configs:
        ENV='development'
        DEBUG=True
        # 设置连接数据库路径
        SQLALCHEMY_DATABASE_URI='mysql+pymysql://root:123456@127.0.0.1:3306/test'
        # 每次请求结束后自动提交数据库中的改动
        SQLALCHEMY_COMMIT_ON_TEARDOWN=True
        # 禁用SQLAlchemy对追踪对象的修改并且发送信号
        SQLALCHEMY_TRACK_MODIFICATIONS = False
        # 操作数据库时显示原始SQL语句
        SQLALCHEMY_ECHO=True
    

    编写好settings.py配置文件后,我们就开始编写导入配置、映射对象和数据模型类等代码,由于代码比较少,方便我们查看和使用,我就把这些代码都写在app.py文件中了,注意:在实际开发中,数据模型和映射对象都是写在其他文件中的。

    from flask import Flask
    import settings
    from flask_sqlalchemy import SQLAlchemy
    from datetime import datetime
    app = Flask(__name__)
    
    app.config.from_object(settings.Configs)        # 加载flask项目配置
    
    db=SQLAlchemy(app)              # 创建映射对象,并绑定在app中
    
    # 创建模型类
    class User(db.Model):
        #设置表名
        __tablename__ = 'user'
        # 创建数据库表字段
        # db.Column(类型,约束)
        id=db.Column(db.Integer,primary_key=True,autoincrement=True)
        username=db.Column(db.String(15),nullable=False)
        password=db.Column(db.String(15),nullable=False)
        phone=db.Column(db.String(11),unique=True)
        rdatetime=db.Column(db.DateTime,default=datetime.now)
    
    if __name__ == '__main__':
        app.run()
    

    好了,基础代码已经写好了,接下来正式对数据库进行增删改查等操作。

    创建数据表

    创建数据表只要编写下面代码即可:

    db.create.all()
    

    db.create_all()方法将寻找所有db.Model的数据模型类,根据数据模型类创建数据表,这里我们只创建了一个数据模型类。我们在pycharm中通过数据库工具Database来观察数据库的变化,运行结果如下图所示:



    在终端命令行中,我们可以看到原始SQL语句并且在test数据库中创建了一个user数据表。

    添加数据

    插入单条数据

    user1=User(username='zhagsan',password='1245',phone='13700100000')      #创建实例对象
    db.session.add(user1)       #插入数据
    db.session.commit()         #提交事务
    

    首先创建一个模型类的实例对象,再使用db.session.add()将实例对象中的参数插入在数据库中,最后使用db.session.comit()来保存我们对数据库的修改。

    插入多条数据

    user1=User(username='huan',password='123',phone='13700000000')      #创建模型类实例对象
    user2=User(username='ying',password='456',phone='13700010000')
    user3=User(username='xue',password='789',phone='13700020000')
    db.session.add_all([user1, user2, user3])                         #插入数据
    db.session.commit()                                             #提交事务
    

    插入多条数据与插入单条数据差不多,插入多条数据也就是创建多个模型类的实例对象,再将实例对象放在列表中,再使用db.session.add_all()方法插入在数据库中,最后使用db.session.comit()来保存我们对数据库的修改。

    查询数据

    查询数据中,我们可以使用Flask-SQLAlchemy中Model类提供的query属性来查询。

    全部查询

    查询全部数据只需要一条代码,其代码如下所示:

    User.query.all()    
    

    精确查询

    User.query.filter_by(username='huan').first()       #查询名为huan的数据
    

    通过User.query.filter_by()方法进行查询,然后通过first()方法来返回第一个查询结果。这里我们选择的是查询名为huan的数据。

    当数据中没有我们要查询的数据,则会返回None。

    模糊查询

    当我们需要通过某些数据特征来查询该特征的数据,该怎么查询呢?

    User.query.filter(User.phone.endswith('3000')).first()      #获取手机尾号为3000的数据
    User.query.filter(User.name!='huan').all()                 #获取用户名不是huan的所有数据
    
    #导入and方法,实现逻辑与查询
    from sqlalchemy import and_
    User.query.filter(and_(User.name!='huan',User.phone.endswith('3000'))).all()  #获取用户名不是huan以及手机尾号为3000
    
    #导入or方法,实现逻辑或查询
    from sqlalchemy import or_
    User.query.filter(or_(User.name!='huan',User.email.endswith('3000'))).all()   #获取用户名不是huan或手机尾号为3000
    
    #导入not,实现取反查询
    from sqlalchemy import not_
    User.query.filter(not_(User.name=='huan')).all()        #获取用户名不是huan的所有数据
    

    通过User.phone.endswith()方法来选定查询以什么结尾的数据内容,通过User.query.filter()方法进行查询,最后使用first()方法返回第一个查询结果或all()方法获取查询的全部数据返回的是一个列表。

    当然除了查询以什么结尾的数据,还可以选择以什么开头的数据、包含什么什么内容的数据,其代码如下所示:

    模型类.属性.startswith()             #以什么开头的数据
    模型类.属性.endswith()               #以什么结尾的数据
    模型类.属性.contains()               #数据包含什么什么
    

    当我们查询的字段为整型或日期类型时,还可以使用以下代码:

    模型类.属性.__lt__(18)                   #小于18
    模型类.属性.__gt__(18)                  #大于18
    模型类.属性.__ge__(18)                  #大于等于18
    模型类.属性.__le__(18)                  #小于等于18
    模型类.属性.between(18,30)              #18到30之间
    

    当然,也可以直接使用> 、< 、=符号来表示。

    主键查询

    我们可以通过数据中的主键来查询数据,代码如下:

    User.query.get(1)
    

    与其他查询方式不同,通过主键来查询数据是使用.get()方法其参数为键值,如果主键不存在没有返回内容。

    当然,我们可以选择返回数据的条数。

    User.query.limit(2).all()                   #获取所有数据中前两条数据
    User.query.offset(2).limit(2).all()          #跳过所有数据中前两条数据再获取跳过后的前两条数据
    

    使用User.query.limit()方法来返回数据的条数,其传递的参数就是返回数据的条数。

    排序

    query默认情况下是按id升序进行排序的,当遇到复杂情况时就需要时用order_by。

    #模型类.query.order_by(参数)
    User.query.order_by(User.id).all    #对所有的id进行排序
    

    当我们想要倒序排列数据时,只要在前面加-就可以了。

    修改数据

    当我们想修改数据时,可以先创建一个变量来接收要修改的数据,通过该变量来修改对应的属性值,最后通过db.session.commit()方法提交事务,代码如下所示:

    user = User.query.first()   #选定要修改的数据
    user.username = 'xiu'       #要修改的参数值
    db.session.commit()         #提交事务
    

    当然也可以将数据全部修改,代码如下所示:

    user = User.query.all()     #选择所有要修改的数据
    for i in user:             #循环遍历
        i.name = 'dong'        #要修改的参数值
        db.session.commit()    #提交事务
    

    首先通过User.query.all()来获取所有数据并存放在user变量中,注意all()返回的时一个列表,所以要用for循环来遍历,再根据自身需要来修改数据,最后通过db.session.commit()方法提交事务。

    删除数据

    删除数据与添加数据很类似,首先通过创建变量来存放要删除的数据,再通过db.session.delete()来删除数据,并使用db.session.commit()方法提交事务。

    user = User.query.first()       
    db.session.delete(user)
    db.session.commit()
    

    可以发现,修改数据和删除数据都是先查询接收要修改或删除的数据,所以我们可以根据查询数据的方法要选择我们要修改或删除的数据。

    删除数据表

    删除数据表很简单,只需要一条代码,其代码如下所示:

    db.drop_all()
    

    通过编写这条代码,程序就会删除表名为模型类中的创建数据表的表名。

    好了,Flask框架扩展包——flask--sqlalchemy数据库操作命令就讲到这里了,感谢观看,下篇文章继续学习Flask框架——模型关系(一对多)。

    公众号:白巧克力LIN

    相关文章

      网友评论

        本文标题:Flask框架——数据库操作(增删改查)

        本文链接:https://www.haomeiwen.com/subject/mfmhirtx.html