Flask---Models

13 篇文章 0 订阅

Models:

在 models.py中:

创建模型:
from flask_sqlalchemy import SQLAlchemy
#创建操作数据库的对象
db = SQLAlchemy()

class Person(db.Model):
    id = db.Column(
        db.Integer,
        primary_key=True,
        autoincrement=True
    )
    name = db.Column(
        db.String(30),
        nullable=False,
        unique=True,
    )
    age = db.Column(
        db.Integer,
        default=1
    )

在views中:

创建表:

db.create_all()

@blue.route("/create")
def create_db():
    db.create_all()
    return "创建完毕"
删除表:

db.drop_all()

@blue.route("/drop")
def drop_db():
    db.drop_all()
    return "删除完毕"
添加数据:
单条数据:
@blue.route("/create_data")
def create_user():
    # 创建数据
    u = Person(
       name="张三"
     )
    # 保存到数据库
    db.session.add(u)
    #提交
    db.session.commit()
多条数据:
@blue.route("/create_data")
def create_user():
    persons = []
    for i in range(10):
        u = Person(
            name="张三" + str(i)
        )
        persons.append(u)
    #添加全部   
    db.session.add_all(persons)
    #提交
    db.session.commit()
    return "创建完毕"
查询数据:
@blue.route("/get_users")
def get_users():
    res = Person.query.all()
    for i in res:
        print(i.name)
    return "ok"
删除数据:
   db.session.delete(模型对象)

   db.session.commit() 删除成功
查询详细用法:
  1. 查询所有用户数据
    User.query.all()
  2. 查询有多少个用户
    User.query.count()
  3. 查询第1个用户
    User.query.first()
  4. 查询id为4的用户[3种方式]
    User.query.get(4)
    User.query.filter_by(id=4).first()    
    User.query.filter(User.id==4).first()

filter:(类名.属性名==)
filter_by:(属性名=)

filter_by: 用于查询简单的列名,不支持比较运算符
filter比filter_by的功能更强大,支持比较运算符,支持or_、in_等语法。

  1. 查询名字结尾字符为g的所有数据[开始/包含]
    User.query.filter(User.name.endswith(‘g’)).all()
    User.query.filter(User.name.contains(‘g’)).all()

  2. 查询名字不等于wang的所有数据[2种方式]
    from sqlalchemy import not_
    注意了啊:逻辑查询的格式:逻辑符_(类属性其他的一些判断)
    User.query.filter(not_(User.name==‘wang’)).all()

    User.query.filter(User.name!=‘wang’).all()

  3. 查询名字和邮箱都以 li 开头的所有数据[2种方式]
    from sqlalchemy import and_
    User.query.filter(and_(User.name.startswith(‘li’), User.email.startswith(‘li’))).all()

User.query.filter(User.name.startswith(‘li’), User.email.startswith(‘li’)).all()

  1. 查询password是 123456 或者 emailitheima.com 结尾的所有数据
    from sqlalchemy import or_
    User.query.filter(or_(User.password==‘123456’, User.email.endswith(‘itheima.com’))).all()

  2. 查询id为 [1, 3, 5, 7, 9] 的用户列表
    User.query.filter(User.id.in_([1, 3, 5, 7, 9])).all()

  3. 查询name为liu的角色数据
    关系引用
    User.query.filter_by(name=‘liu’).first().role.name

  4. 跳过N条数 offset(N)

dogs = dogs.offset(3)

最多取N条

dogs = dogs.limit(4)

要先排序 才能再去使用limit 或者offset

dogs = dogs.order_by("-id").offset(2)

  1. 查询所有用户数据,并以邮箱排序
    排序
    User.query.order_by(‘email’).all() 默认升序
    User.query.order_by(desc(‘email’)).all() 降序

  2. 查询第2页的数据, 每页只显示3条数据
    help(User.query.paginate)
    三个参数: 1. 当前要查询的页数 2. 每页的数量 3. 是否要返回错误

pages = User.query.paginate(2, 3, False)
pages.items # 获取查询的结果
pages.pages # 总页数
pages.page # 当前页数

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值