美文网首页
2021-07-21Sqlalchemy关联查询

2021-07-21Sqlalchemy关联查询

作者: 十点半的橙汁 | 来源:发表于2022-03-28 10:37 被阅读0次

一、无外键关联查询

  • 1.直接查询

class Test(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(32))
    
class TestItems(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    test_id = db.Column(db.Integer)
    
#应用,在浏览器访问http://localhost/test/
@app.route('/test/')
def test():
    query = db.session().query(models.TestItems, models.Test)
    query = query.join(models.Test, models.Test.id == models.TestItems.test_id)
    print(query)

query的返回结果为:[(TestItems01, Test01), (), ……]

参考:https://blog.csdn.net/weixin_34197488/article/details/92749456
  • 2.关联表中字段过多,但是关联获取只取一个字段

class Test(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(32))
    
class TestItems(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    test_id = db.Column(db.Integer)
    
#应用,在浏览器访问http://localhost/test/
@app.route('/test/')
def test():
    query = db.session().query(models.TestItems, models.Test.name.label('TestName'))
    query = query.join(models.Test, models.Test.id == models.TestItems.test_id)
    print(query)

query的返回结果为:[(TestItems01, '测试1的名字'), (), ……]

参考:https://blog.csdn.net/weixin_32637935/article/details/112631663
  • 3.同一个表查询多次
    不处理会报错,sql语句查询同一张表多次,并且没有别名,会报错
    query = db.session().query(TestItems, Test.name.label('TestName'), Test.name.label('TestName'))

正确的处理方式,先对model别名

from sqlalchemy.orm import aliased

 Create = aliased(Account)  前面定义过的model
 Update = aliased(Account)
 query = db.session().query(ArticleCategoryModel, Create.name.label('create'), Update.name.label('update'))
query = query.join(Create, Create.id == ArticleCategoryModel.create_id)
query = query.join(Update, Update.id == ArticleCategoryModel.update_id)
query = query.filter(ArticleCategoryModel.category_parents.is_(None)).all()

query的返回结果[(<ArticleCategoryModel 1>, '七七', '七七'), …………]

参考:https://blog.csdn.net/OrwellChen/article/details/90608858
  • 4.多表查询特定字段
        from system_config.models.sysconfig_model import Account
        create = aliased(Account)
        update = aliased(Account)
        list_columns = [
            ChSenWordModel.wb_id,
            ChSenWordModel.origin,
            ChSenWordModel.knowledge_point,
            ChSenWordModel.knowledge_type,
            create.name.label('create_name'),
            update.name.label('update_name')
        ]
        self.LIST_COLUMNS = list_columns
        result = db.session.query(*list_columns).outerjoin(
            create, create.id == ChSenWordModel.create_id).outerjoin(
            update, update.id == ChSenWordModel.update_id).filter(
            *condition).order_by(ChSenWordModel.origin).paginate(
            page=self.page, per_page=self.page_size, error_out=False)

相关文章

  • 2021-07-21Sqlalchemy关联查询

    一、无外键关联查询 1.直接查询 2.关联表中字段过多,但是关联获取只取一个字段 3.同一个表查询多次不处理会报错...

  • python面试题01

    1、什么是多表关联查询,有几种多表关联的查询方式,分别是什么? 多表关联查询概念: 多表关联查询分类:1.1内连接...

  • 关联关系查询(第一讲)

    关联查询 当查询内容涉及到具有关联关系的多个表时,就需要使用关联查询。根据表与表之间的关联关系的不同,关联查询分为...

  • 关于关联查询的处理

    mybatis关联查询配置有2种:关联嵌套结果,关联嵌套查询关联的查询过程中如果关联的表可能查到很多数据,应该考虑...

  • MySQL的多表关联查询

    一、多表关联查询 多表关联查询是使用一条SQL语句,将关联的多张表的数据查询出来。 1.1 交叉查询 交叉查询就是...

  • 数据库笔记-SQL子查询

    子查询:关联查询和非关联查询 子查询是「查询」中的「查询」,就是「嵌套查询」。 以 NBA 的SQL数据库文件为例...

  • 关联查询、子查询与分页查询

    关联查询 关联关系分为一对一,一对多,多对多关系关联查询就是从多张表中查询数据,当我们使用n张表使用关联查询,至少...

  • 2018-07-12 Mybatis的一对一关联查询

    //一对一关联查询,以订单为中心 关联用户查询

  • Oracle学习(二)

    --======================================多表关联查询--查询员工编号,员工...

  • SQL必知必会(子查询)

    一、什么是关联子查询,什么是非关联子查询 子查询虽然是一种嵌套查询的形式,不过我们依然可以依据子查询是否执行多次,...

网友评论

      本文标题:2021-07-21Sqlalchemy关联查询

      本文链接:https://www.haomeiwen.com/subject/qxpjmltx.html