Flask框架——数据库操作(增删改查)
上篇文章我们学习了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