首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SqlAlchemy使用查询with join,如何只从一个实体而不是两个实体获取列?

在SqlAlchemy中,使用查询语句进行join操作时,可以通过指定需要获取的列来限制结果集的返回。如果只想从一个实体而不是两个实体获取列,可以使用add_columns方法来实现。

下面是一个示例代码:

代码语言:python
代码运行次数:0
复制
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base

# 创建数据库连接
engine = create_engine('mysql+pymysql://username:password@localhost:3306/database')
Session = sessionmaker(bind=engine)
session = Session()

# 创建实体类
Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    age = Column(Integer)

class Address(Base):
    __tablename__ = 'addresses'
    id = Column(Integer, primary_key=True)
    user_id = Column(Integer)
    street = Column(String(100))
    city = Column(String(50))

# 查询语句
query = session.query(User.name, Address.street).join(Address, User.id == Address.user_id)

# 限制只从一个实体获取列
query = query.add_columns(User.name)

# 执行查询
results = query.all()

# 输出结果
for result in results:
    print(result.name, result.street)

在上述代码中,我们使用add_columns方法将User.name列添加到查询结果中,从而只从一个实体获取列。最后,通过遍历结果集,可以获取到所需的列数据。

对于以上示例中使用的SqlAlchemy,腾讯云提供了云数据库 TencentDB for MySQL,可以满足数据库存储的需求。您可以通过以下链接了解更多关于腾讯云数据库的信息:TencentDB for MySQL

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SqlAlchemy 2.0 中文文档(二十)

例如,使用 2.0 风格的查询,我们可以限制User.addresses集合的加载方式,而不管使用的加载类型如何: from sqlalchemy.orm import with_loader_criteria...flat – 布尔值,将传递到FromClause.alias()调用,以便Join对象的别名将别名加入到连接内的单个表,而不是创建子查询。...attribute single_entity = False 如果为 True,则对于单个 Bundle 的查询将返回为单个实体,而不是在一个键元组中的元素。...不支持创建 Join 对象的别名时使用。 flat - 布尔值,将传递给 FromClause.alias() 调用,以便 Join 对象的别名将别名内部的各个表,而不是创建子查询。...attribute single_entity = False 如果为 True,则查询单个 Bundle 将返回单个实体,而不是键入元组中的元素。

32710
  • SqlAlchemy 2.0 中文文档(二十一)

    Query.get() 仅用于返回单个映射实例,而不是多个实例或单个列构造,并且严格限于单个主键值。源 Query 必须以这种方式构造,即针对单个映射实体,没有额外的过滤条件。...如果返回多个对象标识,或者对于仅返回标量值而不是完全映射实体的查询返回多行,则引发 sqlalchemy.orm.exc.MultipleResultsFound。...如果返回多个对象标识,或者如果对于返回标量值而不是完整标识映射的实体的查询返回多行,则引发sqlalchemy.orm.exc.MultipleResultsFound。...如果返回多个对象标识,或者如果返回多行用于仅返回标量值而不是完整身份映射实体的查询,则引发sqlalchemy.orm.exc.MultipleResultsFound。...如果返回了多个对象标识或者对于只返回标量值而不是完整身份映射实体的查询返回了多行,则会引发sqlalchemy.orm.exc.MultipleResultsFound异常。

    57410

    SqlAlchemy 2.0 中文文档(十八)

    在下面的示例中,使用两个 select() 构造针对带有额外 SQL 表达式标记为 expr 的 ORM 实体 A,并使用 union_all() 组合。...在延迟属性是应该一次性加载一组属性的情况下,而不是针对每个属性单独发出 SQL 时,可以使用mapped_column.deferred_group参数,它接受一个任意字符串,用于定义要取消延迟的列的通用组...在常见情况下,延迟属性是一组应该同时加载的属性的一部分时,而不是为每个属性单独发出 SQL,可以使用mapped_column.deferred_group参数,该参数接受一个任意字符串,该字符串将定义一个通用列组以解除延迟...在下面的示例中,针对 ORM 实体 A 使用了两个select() 构造,其中包含一个标记为 expr 的额外 SQL 表达式,并使用union_all() 进行组合。...在下面的示例中,使用两个`select()`构造针对 ORM 实体 `A`,并在`expr`中标记了一个额外的 SQL 表达式,并使用`union_all()`将它们组合起来。

    27910

    SqlAlchemy 2.0 中文文档(二)

    ', 'spongebob@sqlalchemy.org')] ROLLBACK 从并集中选择 ORM 实体 前面的例子演示了如何构造一个 UNION,给定两个 Table 对象,然后返回数据库行。...', 'spongebob@sqlalchemy.org')] ROLLBACK 从联合中选择 ORM 实体 前面的示例说明了如何构造一个 UNION,给定两个Table对象,然后返回数据库行。...- 在 ORM 查询指南 中的 ORM 实体从联合中选择 前面的示例说明了如何在给定两个Table对象的情况下构造一个 UNION,然后返回数据库行。...某些类别的函数返回整行而不是列值,在需要引用特定列的情况下;这些函数被称为表值函数。...某些类别的函数返回整行而不是列值,需要引用特定列;这些函数被称为表值函数。 当执行语句并获取行时,函数的 SQL 返回类型也可能很重要,对于那些 SQLAlchemy 需要应用结果集处理的情况。

    45510

    SqlAlchemy 2.0 中文文档(十六)

    而不是使用本节中描述的映射级别的 mapper.with_polymorphic 参数。...警告 对于加入继承映射,请优先在查询中显式使用with_polymorphic(),或者对于隐式急切子类加载使用Mapper.polymorphic_load与"selectin",而不是使用本节中描述的映射器级...警告 对于加入继承映射,请优先在查询中显式使用with_polymorphic(),或者对于隐式急切子类加载,请使用Mapper.polymorphic_load与"selectin",而不是使用本节中描述的映射器级别的...flat – 布尔值,将被传递到 FromClause.alias() 调用,以便 Join 对象的别名将别名为加入内的各个表,而不是创建子查询。...flat – 布尔值,将被传递到 FromClause.alias() 调用,以便 Join 对象的别名将别名为加入内的各个表,而不是创建子查询。

    28410

    SqlAlchemy 2.0 中文文档(五十六)

    select().join() 和 outerjoin() 将 JOIN 条件添加到当前查询中,而不是创建子查询 - 有些相关的是,Select 类中的 .join() 和 .outerjoin() 方法隐式地创建了一个子查询...随着新方法的推出,该对象逐渐演变成为 Query 对象,随着新功能的添加,例如能够选择单个列、能够一次选择多个实体、能够从 Query 对象而不是从 select 对象构建子查询等。...新方法利用了aliased()构造,使得 ORM 内部不需要猜测应该如何适应哪些实体和列;在上面的例子中,ua和aa对象,都是AliasedClass实例,为内部提供了一个明确的标记,表明子查询应该被引用以及正在考虑的查询组件的哪个实体列或关系...随着新方法的推出,对象演变为 Query 对象,新增功能如能够选择单个列、能够一次选择多个实体、能够从 Query 对象而不是从 select 对象构建子查询。...随着新方法的推出,该对象演变为Query对象,新增了诸如能够选择单个列、能够一次选择多个实体、能够从Query对象构建子查询而不是从select对象开始的新功能。

    48910

    SqlAlchemy 2.0 中文文档(十九)

    user: Mapped[User] = relationship(lazy="joined") 连接预加载通常作为查询的选项应用,而不是作为映射的默认加载选项,特别是在用于集合而不是多对一引用时。...特别地,joinedload()是如何实现不以任何方式影响返回的实体行的结果的,这是因为它为添加到查询中的连接创建了一个匿名别名,因此它们不能被查询的其他部分引用。...例如,只设置一个属性为急切加载,而所有其他属性都为提升: from sqlalchemy import select from sqlalchemy.orm import joinedload from...在这种情况下,这两个连接很可能是多余的 - 而事实上它们确实是。...如何使用joinedload()来实现不影响返回的实体行的结果,它的特点是创建查询中添加的连接的匿名别名,以便其他查询的部分不能引用它们。

    28110

    SqlAlchemy 2.0 中文文档(十二)

    要添加涉及A.b关系的额外条件,通常需要直接引用B_viacd,而不是使用B,特别是在A.b的目标实体要转换为别名或子查询的情况下。...B_viacd = aliased(B, b_viacd_join, flat=True) 在查询中使用别名类目标 在前面的示例中,A.b 关系将 B_viacd 实体作为目标,而 不是 直接的 B 类...要添加涉及 A.b 关系的附加条件,通常需要直接引用 B_viacd 而不是使用 B,特别是在将 A.b 的目标实体转换为别名或子查询的情况下。...B_viacd = aliased(B, b_viacd_join, flat=True) 在查询中使用 AliasedClass 目标 在前面的示例中,A.b 关系将 B_viacd 实体作为目标,而不是直接使用...要添加涉及 A.b 关系的额外条件,通常需要直接引用 B_viacd 而不是使用 B,特别是在目标实体 A.b 需要转换为别名或子查询的情况下。

    23510

    SqlAlchemy 2.0 中文文档(七十二)

    ,其中包含性检查仍然使用键包含;如果行中有名为“name”的列,则"name" in row将返回 True,而不是一个值。...,而不是创建子查询 为了实现 2.0 风格对Select的使用,特别是统一Query和Select的目标,关键是有一个工作的Select.join()方法,其行为类似于Query.join()方法,向现有...,而不是创建子查询 为了实现统一Query和Select的目标,特别是对于 2.0 风格使用Select,至关重要的是有一个工作的Select.join()方法,其行为类似于Query.join()方法...#1763 列加载器如deferred()、with_expression() 只在最外层、完整的实体查询中指定时才生效 注意 这个变更说明在此文档的早期版本中并不存在,但对于所有 SQLAlchemy...,并且只从 UNION 的第一个元素中获取,丢弃查询其他部分的任何选项。

    87710

    小白学Flask第十一天| flask-sqlalchemy数据库扩展包(一)

    查询的语句也是结构化的语言。 关系型数据库的列定义了表中表示的实体的数据属性。比如:商品表里有name、price、number等。...定义模型 模型是表示应用使用的持久化实体,在ORM中,模型一般是一个Python类,类中的属性就是数据库表中的列。...backref参数向User模型中添加一个role属性,从而定义反向关系。通过User实例的这个属性可以获得对应的Role模型对象,而不用再通过role_id外键获取。...这里给出常用的SQLAlchemy关系选项: 选项名 说明 backref 在关系的另一模型中添加反向引用 primary join 明确指定两个模型之间使用的联结条件 uselist 如果为False...,不使用列表,而使用标量值 order_by 指定关系中记录的排序方式 secondary 指定多对多中记录的排序方式 secondary join 在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结条件

    2.6K30

    SqlAlchemy 2.0 中文文档(三)

    - 我们在这里设置了User和Address实体的 ORM 映射 选择 ORM 实体和列 - 一些关于如何为诸如User之类的实体运行 SELECT 语句的示例 使用 ORM 工作单元模式插入行...joinedload()策略最适合加载相关的多对一对象,因为这只需要向主实体行添加额外的列,在任何情况下都会获取这些列。...它使用的 SELECT 形式在大多数情况下可以只针对相关表发出,而不需要引入 JOIN 或子查询,并且仅查询那些尚未加载集合的父对象。...joinedload() 策略最适合于加载相关的多对一对象,因为这仅需要将额外的列添加到主实体行中,而这些列无论如何都会被获取。...joinedload() 策略最适合加载相关的一对多对象,因为这只需要向主实体行添加额外的列,这些列无论如何都会被检索。

    41520

    Flask数据库过滤器与查询集

    这一属性可替代person_id访问 person模型,此时获取的是模型对象,而不是外键的值。...例如如果address模型中有两个或以上的列定义为person模型的外键,SQLAlchemy就不知道该使用哪列。...如果无法决定外键,你就要为db.relationship()提供额外参数,从而确定所用外键,常用的配置选项如下所示: backref:在关系的另一个模型中添加反向引用 primary join:明确指定两个模型之间使用的联结条件...自引用关系 多对多关系在我们的Web应用中可以用来实现用户之间的关注,但是在上面的文章和标签的例子中,关联表连接的是两个明确的实体,而在用户关注其他用户时,都在users表内,只有一个实体。...这种用户之间关注的关系,我们依然可以使用上面的方法来实现。 高级多对多关系 自引用多对多关系可在数据库中表示用户之间的关注,但却有个限制。使用多对多关系时,往往需要存储所联两个实体之间的额外信息。

    7K10

    SqlAlchemy 2.0 中文文档(五十四)

    映射类需要为每个要存储独立值的属性指定明确的名称;当两个列具有相同的名称并且没有消歧义时,它们就会落入同一个属性下,效果是从一个列中的值被复制到另一个列中,取决于哪个列首先分配给属性。...减轻这种情况的常见策略包括: 获取单个列而不是完整的实体,即: select(User.id, User.name) 而不是: select(User) 使用Bundle对象来组织基于列的结果: u_b...缓解这种情况的常见策略包括: 获取单个列而不是完整的实体,即: select(User.id, User.name) 而不是: select(User) 使用 Bundle 对象组织基于列的结果: u_b...减轻这种情况的常见策略包括: 获取单个列而不是完整实体,也就是: select(User.id, User.name) 而不是: select(User) 使用Bundle对象来组织基于列的结果: u_b...如何遍历与给定对象相关的所有对象? 有没有一种方法可以自动只获取唯一关键字(或其他类型的对象),而不需要查询关键字并获取包含该关键字的行的引用?

    36310

    带你认识 flask 粉丝

    这就像两个重叠的一对多关系。 对于这种类型的关系,我想要能够查询数据库来获取教授给定学生的教师的列表,以及某个教师课程中的学生的列表。...不过,在学生和老师的例子中,多对多关系关联了两个实体。但在粉丝关系中,用户关注其他用户,只有一个用户实体。那么,多对多关系的第二个实体是什么呢? 该关系的第二个实体也是用户。...如果你看一下这个查询的结构,你会注意到有三个主要部分,分别是join()、filter()和order_by(),他们都是SQLAlchemy查询对象的方法: Post.query.join(...)....请记住,查询是从Post类中发出的,所以尽管我曾经得到了由数据库创建的一个临时表来作为查询的一部分,但结果将是包含在此临时表中的用户动态, 而不会存在由于执行join操作添加的其他列。...第二种方法是通过创建第二个查询返回用户自己的动态,然后使用“union”操作将两个查询合并为一个查询。 深思熟虑之后,我选择了第二个方案。

    93810

    SqlAlchemy 2.0 中文文档(七十八)

    新的 ORM 功能 重写的relationship()机制 0.8 版本在relationship()如何确定两个实体之间如何连接方面具有更加改进和强大的系统。...虽然 SQLAlchemy ORM 模型也是完全可自省的,但这从来都不是一个完全稳定和受支持的功能,用户往往不清楚如何获取这些信息。...不幸的是,该方法很笨拙,只适用于列表中的第一个实体,而且在使用和内部方面都有一些尴尬的行为。...新的 ORM 特性 重写的 relationship() 机制 0.8 版本中关于 relationship() 如何确定如何在两个实体之间连接的能力得到了大大改进和增强。...不幸的是,该方法很笨拙,只适用于列表中的第一个实体,否则在使用和内部方面都有一些尴尬的行为。

    15510
    领券