SQLAlchemy的relationship

本文深入探讨了SQLAlchemy中的关系型ORM概念,通过具体示例讲解了如何使用relationship属性来建立多层嵌套关系,如爷爷、父亲与儿子之间的关联,并介绍了查询这些关系的方法。此外,还提到了数据库连接的两种方式:socket和tcp/ip。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说起外键(ForeignKey)大家应该都不陌生,这里说令一种关系relationship
他可以使用更简便的方式获取多层嵌套关系

# 这个是爷爷
from sqlalchemy.orm import relationship

class Grandpa(BaseTable, HasId):
	id = Column(String(36)),
	name = Column(String(36)),
	# 这里对外键也举个例子
	grandma_id = Column(String(36), ForeignKey('grandma.id', ondelter='CASCADE')), 
	# 这里的爷爷和父亲建立了relationship
	father = relationship(Father, innerjoin=True, cascade='all,save-update,delete')
# 这个是父亲
class Father(BaseTable, HasId):
	id = Column(String(36)),
	name = Column(String(36)),
	# 父亲已经与爷爷建立了relationship,他还可以与儿子建立其他的relationship
	grandpa_id = Column(String(36)),
	son = relationship(Son, innerjoin=True, cascade='all,save-update,delete')
# 这个是儿子
class Son(BaseTable, HasId):
	id = Column(String(36)),
	name = Column(String(36)),
	father_id = Column(String(36))
此时查询数据库:
grandpa = cls.basic_select(name="yeye")
# 此时的father可以有很多个,每一个father都是一条father对象
father = grandpa.father 
son = father.son

类似于这种对象的格式
在这里插入图片描述

连接数据库时有2种方式:

  1. socket:默认在my.cnf里有指定socket文件的位置,/tmp/mysql.sock (如果数据库是通过docker启动,可以通过建立软连接找到socket)
  2. tcp/ip:-h 127.1.1.1 -p 3306 -S /tmp/mysql.sock
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值