SQLAlchemy的relationship

说起外键(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
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy中的relationship是用来定义数据库表之间的关系的工具。它允许我们在对象模型中表示实体之间的关联,例如一对多、多对一和多对多关系。 通过relationship,我们可以在模型类中定义一个属性,用于表示两个表之间的关系。这个属性可以在查询时被使用,从而方便地获取相关联的数据。 在使用relationship之前,需要导入`relationship`和`backref`这两个类或函数。 下面是一个例子,展示了如何在SQLAlchemy中使用relationship: ```python from sqlalchemy import Column, Integer, String, ForeignKey from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) posts = relationship('Post', backref='user') class Post(Base): __tablename__ = 'posts' id = Column(Integer, primary_key=True) title = Column(String) user_id = Column(Integer, ForeignKey('users.id')) # 创建数据库引擎和会话 engine = create_engine('sqlite:///database.db') Session = sessionmaker(bind=engine) session = Session() # 创建表格 Base.metadata.create_all(engine) # 创建用户和帖子实例 user = User(name='John') post = Post(title='Hello World') # 建立关系 user.posts.append(post) # 提交到数据库 session.add(user) session.commit() # 查询数据 user = session.query(User).first() print(user.posts) # 输出与该用户关联的所有帖子 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值