Flask框架种使用ORM模型对MySQL数据库的管理

通过flask连接MySQL数据库后,使用ORM模型对数据库管理
ORM模型的优点:使用 ORM 做数据库的开发可以有效的减少重复SQL语句的概率,写出来的模型也更加直观、清晰。支持多个关系数据库引擎,包括流行的 MySQL 、 PostgreSQL 和 SQLite 。可以非常轻松的切换数据库。

1.创建数据库

创建用户,其中包括
用户id(int,主键,自增)
用户姓名(varchar,非空)
密码(varchar,非空)等字段
继承db.Model模型成为ORM模型

class User(db.Model):
	# 定义表名
    __tablename__ = "user"
    添加字段,使用db.Column映射成列属性,
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    username = db.Column(db.String(100), nullable=False)
    password = db.Column(db.String(100), nullable=False)

with app.app_context():
    db.create_all()

db.Column中常用的数据类型

类型名Python 类型说明
Integerint普通整数,一般是32位
SmallIntegerint取值范围小的整数,一般是 16 位
BigIntegerint 或 long不限制精度的整数
Floatfloat浮点数
Numericdecimal.Decimal定点数
Stringstr变长字符串
Textstr编程字符串,对较长或不限长度的字符串做了优化
Unicodeunicode变长 Unicode 字符串
UnicodeTextunicode变长 Unicode 字符串,对较长或不限长度的字符串做了优化
Booleanbool布尔值
Datedatetime.date日期
Timedatetime.time时间
DateTimedatetime.datetime日期和时间
Intervaldatetime.timedelta时间间隔
Enumstr一组字符串
PickleType任何 python 对象自动使用 Pickle 序列化
LargeBinarystr二进制文件

2.增加数据

首先创建对象,然后将对象添加到session中,最后同步到数据库中

@app.route("/user/add")
def add_user():
    # 1.创建ORM对象
    user = User(username="张三", password="1111")
    # 2.将ORM对象添加到db.session
    db.session.add(user)
    # 3.将db.session中的改变同步到数据库中
    db.session.commit()
    return "用户创建成功"

3.查询数据

@app.route("/user/query")
def query_user():
    # 1.get查找:根据主键查找
    # user = User.query.get(1)
    # print(f"{user.id}: {user.username}-{user.password}")
    # 2.filter查找
    # 类列表的对象
    users = User.query.filter(User.username.like("%张%"))
    for user in users:
        print(user.username)
    return "数据查找成功"

四种查询方式

all返回一个QuerySet
fittler等同于sql中的where,返回的一个过滤后的QuerySet
exclude回一个新的QuerySet,它包含不满足查询参数的对象
get只有一个对象满足你的查询,也就是查询必须且只有一个返回符合的查询语句

三种获取数据方式

  • 第一种all
    all相当于查询所有字段的返回,select * from 表
    返回的Queryset类型,Queryset中包含的是表每一行返回的对象
  • 第二种values
    values相当于select 字段 from 表 返回的Queryset类型,Queryset中包含的是每一行数据字典的形式返回k代值字段,v代值数据
  • 第三种-values_list
    相当于select 字段 from 表 返回的Queryset类型,Queryset中包含的是每一行数据元组的形式返回字段数据

其他查询方式

返回QuerySet对象的

order_by()用来进行升序降序排列使用,默认升序,加-降序
distinct()去重和values搭配使用

不返回对象的

count*当我们只想查询 返回的条数的时候我们应该用count 比用first 要好,但当我们想要第一个返回的对象的时候我们可以用first
first/last

queryset中支持链式操作book=Book.objects.all().order_by(’-nid’).first()

模糊查询常用的操作

__gt大于>
__gte大于等于>=
__lt小于<
__lte小于等于<=
__exact精确等于 like ‘aaa’
__iexact精确等于 忽略大小写 ilike ‘aaa’
__contains包含 like ‘%aaa%’
__icontains包含,忽略大小写 ilike ‘%aaa%’,但是对于sqlite来说,contains的作用效果等同于icontains。
__in查询年龄在某一范围的学生Student.objects.filter(age__in=[10, 20, 30])
is null / is not null:__isnull 判空

4.修改数据

@app.route("/user/update")
def update_user():
    users = User.query.filter_by(username="张").first()
    # 相当于在会话当中已经完成修改操作,不需要db.session
    users.password = "9999"
    db.session.commit()
    return "数据修改成功"

5.删除数据

首先查找到对象,然后将从会话中删除,最后同步到数据库中

@app.route("/user/delete")
def delete_user():
    # 1.查找
    user = User.query.get(1)
    # 2.删除
    db.session.delete(user)
    # 3.将db。session中的修改,同步到数据库中
    db.session.commit()
    return "删除成功"
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值