zoukankan      html  css  js  c++  java
  • Flask-sqlalchemy 语法总结

    Flask-sqlalchemy 语法总结

    ** DDL
    db.create_all() :创建实体表
    db.drop_all(): 删除表

    1)插入表
    Db.session.add(user) #user是实体对象
    ##批量插入
    Db.session.add_all([user1,user2,user3,…..])
    ##提交
    Db.session.commit()

    2) 修改表
    如果实体有id,那么就会变成更新操作,如果没有就是默认插入操作
    User.name=’xiaobing’
    Db.session.add(user)
    Db.session.commit()

    3)删除行
    Db.session.delete(user)
    Db.session.commit()


    2,查询
    1)filter_by,filter
    User.query.filter_by(role=user_role).all()
    user_role = Role.query.filter_by(name='User').first()
    filter_by是直接根据实体对象去转化sql,filter是比较直接插入到sql中

    常用的SQLALchemy查询过滤器
    过滤器 说明:
    * filter() 把过滤器添加到原查询上
    * filter_by() 把等值过滤器添加到原查询上
    * limit() 限制原查询返回的结果数量
    * offset() 偏移原始查询返回的结果
    * order_by() 根据指定条件对原查询进行排序
    * group_by() 根据指定条件对原查询结果进行分组
    在users = db.relationship('User', backref='role', lazy='dynamic') 加入了lazy=’dynamic’参数,从而禁止自动执行查询,user_role.users会返回一个尚未执行的查询,因此可以在其上添加过滤器
    user_role.users.order_by(User.username).all()
    最常用的SQLALCHEMY列选项
    选项名 说明
    primary_key 主键
    unique 是否允许重复值
    index 设为True,为这一 列建立索引
    nullable 设为True,允许使用空
    default 默认值

    2)like 模糊匹配
    例如:
    categorys = Category.query.filter(Category.name.like("%"+keyword+"%")).all()
    这种好像也可以
    hosts.query.whoosh_search('ce').all()

    3)连表查询

    class Topic(db.Models):
    __tablename__ = 'topic'
    id = db.Column(db.Integer, primary_key = True)
    content = db.Column(db.Text)
    
    class Reply(db.Models):
    __tablename = 'reply'
    id = db.Column(db.Integer, primary_key = True)
    topic_id = db.Column(db.Integer)
    content = db.Column(db.Text)

    查询:

    result=Reply.query.join(Topic, Reply.topic_id==Topic.id).add_entity(Topic).all()

    然后遍历值:

    for res in result:
       res.Reply.xxx
       res.Topic.xxx

    4)查询返回指定的字段

    User.query(User.name,User.email,User.sex).order(User.name.des()).limit(20).skip(200)

    5)group by 分组查询

    第一种方式:

    rs =User.query(StudentInfo.cls, func.sum(StudentInfo.cert_count)).group_by(StudentInfo.cls).all()

    第二种方式:

    Create_engine=SQLAlchemy.get_engine()
    sql = 'select cls, sum(cert_count) from stuinfo group by cls'
    rs = engine.execute(sql)
    for row in rs:
          print row[0], row[1]

    6) 分页显示paginate

    pagination = Post.query.order_by(Post.timestamp.desc()).paginate(page,per_page=current_app.config['ARTISAN_POSTS_PER_PAGE'],error_out=False)

    返回的pagination对象 包含以下:
    Page:当前页
    Page_per:每页显示多少条
    Total:总条数

  • 相关阅读:
    Java+Spring Boot+Shiro前后端分离权限基础框架
    201809~201810 期推荐文章
    Spring Boot 2.0.2 教程
    201808 期推荐文章
    201807 期推荐文章
    Simple-Mult-SSM 基于Simple-SSM扩展Hessian注解的javaweb前后端分离SSM基础框架
    hexo + github 搭建博客系列教程汇总
    DockPanel与GeckoFX、ChrominumFX、CefSharp结合使用问题
    APP并非一个人在战斗,还有API—Xamarin.Android回忆录
    我正在使用Xamarin的跨平台框架—Xamarin.Android回忆录
  • 原文地址:https://www.cnblogs.com/minsons/p/8193514.html
Copyright © 2011-2022 走看看