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

通过grandparent...in sqlalchemy按父选择的最佳方法

在SQLAlchemy中,通过grandparent...in语法按父选择的最佳方法是使用join()方法和filter()方法的组合。

首先,我们需要使用join()方法将相关的表连接起来。在这种情况下,我们需要连接父表、子表和孙表。假设我们有三个表:Grandparent、Parent和Child,它们之间的关系是Grandparent和Parent是一对多关系,Parent和Child也是一对多关系。

下面是一个示例代码:

代码语言:txt
复制
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy import join
from sqlalchemy.orm import aliased

# 创建数据库引擎和会话
engine = create_engine('数据库连接字符串')
Session = sessionmaker(bind=engine)
session = Session()

# 创建表的映射类
class Grandparent(Base):
    __tablename__ = 'grandparent'
    id = Column(Integer, primary_key=True)
    name = Column(String)

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    grandparent_id = Column(Integer, ForeignKey('grandparent.id'))

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    parent_id = Column(Integer, ForeignKey('parent.id'))

# 创建表的关联关系
Grandparent.children = relationship("Parent", back_populates="grandparent")
Parent.grandparent = relationship("Grandparent", back_populates="children")
Parent.children = relationship("Child", back_populates="parent")
Child.parent = relationship("Parent", back_populates="children")

# 使用join()方法和filter()方法进行查询
grandparent_alias = aliased(Grandparent)
parent_alias = aliased(Parent)

query = session.query(Child).\
    join(parent_alias, Child.parent).\
    join(grandparent_alias, parent_alias.grandparent).\
    filter(grandparent_alias.name == '父名称')

result = query.all()

在上面的代码中,我们使用了aliased()方法创建了别名,以便在join()方法和filter()方法中使用。通过join()方法将Parent表和Child表连接起来,并通过join()方法将Grandparent表和Parent表连接起来。然后,使用filter()方法过滤出Grandparent表中name为'父名称'的记录。最后,使用all()方法获取查询结果。

这种方法可以有效地按照父选择子记录,并且可以适用于更复杂的查询场景。在腾讯云的云数据库SQL Server产品中,您可以使用SQL Server的相关功能来实现类似的查询操作。您可以通过访问腾讯云官方网站了解更多关于云数据库SQL Server的信息:腾讯云数据库SQL Server

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

相关·内容

通过包装抽象方法达到结构和行为都统一

} }; int main() {     Parent* p = new Child2;     p->hello();     return 0; } 在上面的设计中,结构是统一,...对外展现是Parent,但是行为并非统一,当使用gdb打印调用栈时,是看不到Parent影子,当系统庞大后,对新人来理解系统会增加一些阻力。...通过统一行为,就可以将这个清晰化。...方法是:在Parent中增加一个非抽象方法,由这个新增加非抽象方法来调用hello,这样在调用栈中就可以见到Parent身影了,调用栈显示有层次感,有助于理解系统。...,没有带来任何好处,但软件开发实则为一项工程性工作,需要考虑到整体性和外部因素等,个人觉得这样做很值得,特别是当你使用UML作设计时,时序图将显得更有条理性。

31210
  • 类和子类对象获取值方式验证,通过类属性方式获取不到值,需要使用get方法

    类和子类对象获取值方式验证,通过类属性方式获取不到值,需要使用get方法 静态属性通过类.属性方式获取,对象获取使用get方法获取 package com.example.core.mydemo.java...String channelName) { this.channelName = channelName; } /** * partnerName: //通过类属性方式获取不到值...,需要使用get方法 * channelName: //通过类属性方式获取不到值,需要使用get方法 * partnerName2:合作商名称 * channelName2...* channelName3:渠道商名称 //对象自身属性值可以获取 * partnerName4:合作商名称 * channelName4:渠道商名称...* MAX=100 静态属性通过类.属性方式获取,对象获取使用get方法获取 * @param args */ public static void main(String

    9910

    【Kotlin】Kotlin 类继承 三 ( super 关键字使用 | super@ 外部调用方法 | 子类选择性调用 类 接口 方法 super )

    子类选择调用不同 类 / 接口方法 ( super ) I . 子类调用类总结 ---- 1 ....子类调用方法 ( super ) ---- 子类调用方法 : 子类中可以通过 super 调用方法 , 包括普通方法 , 和属性访问 setter 方法 ; 其中 super 相当于类对象引用...子类选择调用不同 类 / 接口方法 ( super ) ---- 1 ....子类选择性调用类 / 接口方法 : 子类可以继承类 , 实现多个接口 , 如果类与接口 , 或者不同接口之间定义了相同名称方法 , 那么需要使用 super.方法名() 选择调用指定...代码示例 : 代码中定义了一个类 Father , 接口 Build , 类和接口 都定义了 action 方法 , 子类 Son 继承类 , 实现 Build 接口 , 子类通过 super 调用类中成员或方法

    1.4K10

    添加和共享打印机方法是_名称选择共享打印机输入什么

    选择并按住(或右键单击)想要共享打印机、选择“打印机属性”,然后选择“共享”选项卡。 在“共享”选项卡上选择“共享此打印机”。 如果需要,可编辑打印机共享名称。...选择想要打印机,然后选择“添加设备”。 如果未看到想要打印机,请选择“我想要打印机未列出”。...在“添加打印机”对话框中,选择名称选择共享打印机”,然后输入主要电脑计算机或设备名称,和使用以下其中一种格式打印机共享名称:\\computername\printername http://computername...选择想要打印机,选择“下一步”。出现提示时,安装打印机驱动程序。 如果未看到想要打印机,请选择“我想要打印机未列出”。...在“添加设备”对话框中,选择名称选择共享打印机”,然后输入主要电脑计算机或设备名称,和使用以下其中一种格式打印机共享名称:\\computername\printername http://computername

    4.3K30

    jQuery通过id选择器绑定双击事件,和appendTo()方法使用详解

    selected",document);==>$("option:selected");//不可以 var alloptions = $("option:selected",$("#id"));//选择哪个下拉...(select)列表被选中值(第二种写法) var alloptions = $("option:selected",#id);//这个是另外一种写法也是可以被识别的(第三中写法)...var alloptions = $("option:selected",this);//指的是当前下拉下表函数下,选中中值(第四种写法) alert(alloptions.length...); //appendTo()把所有匹配元素追加到另一个指定元素元素集合中。...//实际上,使用这个方法是颠倒了常规$(A).append(B)操作,即不是把b追加到a,而是把a追加到b $("option:selected",this).appendTo($("

    1.2K20

    ACL2016最佳论文:通过整合基于路径方法和分布式方法,改善词对检测

    然后,我们将所用方法延伸为整合基于路径和分布式信号,这显著地将此任务上性能提高到了当前最佳水平。 1.简介 在自然语言处理任务中,词对关系是非常重要词汇语义关系 。...唯一解决方法是和PATTY系统所做一样,通过使用他们讲话一部分标签或百搭牌代替路径上面的词汇来归纳路径。 总体而言,最好路径为基础方法性能比分配方法更糟糕。...我们使用验证集合进行模型选择,旨在对每一种方法超参数进行调整。最优超参数将在附录中呈现。...我们运用验证集合选择模型,旨在甄选出最优矢量,最优方法与正则因子(见附录)。 ?...通过努力学习这一方法能避免这种泛化和减低重复。HypeNET提供了一个更好中点,通过学习额外相似语义路径能更好地规划路径,例如,X成为Y一种形式或X是Y一种形式。

    85950

    SqlAlchemy 2.0 中文文档(三十三)

    short_selects.py - 这一系列测试说明了通过主键选择单个记录不同方法 single_inserts.py - 在这一系列测试中,我们关注是一种在独立事务内插入一行数据方法...,并且通常性能从最差到最佳顺序排序,基于 SQLAlchemy 提供功能数量,从最大到最小(这两个方面通常完美对应)。...使用,并且通常性能从最差到最佳顺序排序,根据 SQLAlchemy 提供功能量多少,从最大到最小排列(这两件事通常完美对应)。...bulk_inserts.py - 这一系列测试展示了批量插入大量行不同方法。 short_selects.py - 这一系列测试展示了通过主键选择单个记录不同方法。...bulk_inserts.py - 这一系列测试展示了批量插入大量行不同方法。 short_selects.py - 这一系列测试展示了通过主键选择单个记录不同方法

    27910

    SqlAlchemy 2.0 中文文档(十五)

    使用 SQL 表达式 ORM 批量插入 遗留会话批量插入方法 ORM“upsert”语句 主键进行 ORM 批量更新 为具有多个参数集 UPDATE 语句禁用主键进行...ORM 实体可以使用Select.from_statement()方法从简单复合选择选择,该方法如在从文本语句中获取 ORM 结果中所示。...PropComparator.and_() 方法位置接受一系列 SQL 表达式,这些表达式将通过 AND 连接到 JOIN ON 子句。...ORM 实体可以通过简单复合选择使用 Select.from_statement() 方法进行选择,该方法在 从文本语句中获取 ORM 结果 中已经说明。...PropComparator.and_()方法位置接受一系列 SQL 表达式,这些表达式将通过 AND 连接到 JOIN ON 子句。

    20410

    SqlAlchemy 2.0 中文文档(七十九)

    SQLAlchemy 提供了一个简单构造,通常通过现有函数子句调用,使用 over() 方法,该方法接受 order_by 和 partition_by 关键字参数。...通过使外键引用对象行 NOT NULL,数据库会以与 SQLA 允许大多数其他操作相同方式建立数据一致性。如果对象外键可为空,则可以插入行。...该扩展提供了一种机制,通过该机制,用户定义数据类型可以向拥有的级或级提供更改事件。...SQLAlchemy 提供了一个简单构造,通常通过现有的函数子句调用,使用over()方法,接受order_by和partition_by关键字参数。...SQLAlchemy 提供了一个简单构造,通常通过现有的函数子句调用,使用over()方法,接受order_by和partition_by关键字参数。

    9610

    SqlAlchemy 2.0 中文文档(十九)

    选择 IN 加载 - 可通过lazy='selectin'或selectinload()选项使用,这种加载形式会发出第二个(或更多)SELECT 语句,将对象主键标识符组装到一个 IN 子句中,以便通过主键一次加载所有相关集合...这可以通过使用PropComparator.and_()方法来实现,该方法通过一个选项传递,以便加载结果被限制为给定过滤条件: from sqlalchemy import select from...选择 IN 加载 - 通过lazy='selectin'或selectinload() 选项可用,此加载形式发出第二个(或更多)SELECT 语句,将对象主键标识符组装成一个 IN 子句,以便通过主键一次加载所有相关集合...这可以通过使用 PropComparator.and_() 方法来实现,该方法通过一个选项,使加载结果限制为给定筛选条件: from sqlalchemy import select from sqlalchemy.orm...这可以通过使用 PropComparator.and_() 方法来实现,该方法通过选项传递,从而将加载结果限制为给定过滤条件: from sqlalchemy import select from

    22510

    SqlAlchemy 2.0 中文文档(七十八)

    这些注释也可以通过foreign()和remote()函数明确提供给应用代码,无论是为了提高高级配置可读性,还是直接注入一个精确配置,绕过通常连接检查启发式方法: from sqlalchemy.orm...仍然可以刷新一个对象,即使它没有与所有必需对象关联,如果该对象一开始就没有与这些对象关联,或者如果它被清除,但随后通过后续附加事件重新与Session关联,但仍未完全关联。...仍然可以刷新一个对象,该对象尚未与其所有必需级关联,如果该对象一开始就未与这些级关联,或者如果它被清除,但随后通过后续附加事件重新与Session关联,但仍未完全关联。...以前行为是,挂起对象仅在与所有对象解除关联时才会被清除。通过行为变更,只要挂起对象与先前相关联任何对象解除关联,它就会被清除。...仍然可以刷新一个与所有必需对象都不相关联对象,如果该对象一开始就没有与这些对象相关联,或者如果它被清除,但后来通过后续附加事件重新与Session相关联但仍未完全相关联。

    15110
    领券