Web开发——Flask框架Python待用

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

2022-07-16  本文已影响0人  白巧克力LIN

上篇文章我们学习了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

上一篇下一篇

猜你喜欢

热点阅读