sqlalchemy之append

发布时间 2023-09-26 17:16:25作者: 岳宗柯

在 SQLAlchemy 中,append 方法通常用于将一个对象添加到关系属性中,特别是在多对多(Many-to-Many)或一对多(One-to-Many)关系中。这个方法的用途是向关系属性添加一个新的关联对象,以建立关系。

在多对多关系中,通常有一个中间表来表示两个模型之间的关系。append 方法用于将一个对象添加到这个中间表中,从而将两个模型关联起来。下面是一些示例代码,演示了在 SQLAlchemy 中如何使用 append 方法。

假设有两个模型:User 和 Role,它们之间是多对多关系,通过中间表 user_role 进行关联。

from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import sessionmaker, relationship
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = 'users'
    
    id = Column(Integer, primary_key=True)
    username = Column(String, unique=True, nullable=False)
    
    roles = relationship('Role', secondary='user_role', back_populates='users')

class Role(Base):
    __tablename__ = 'roles'
    
    id = Column(Integer, primary_key=True)
    name = Column(String, unique=True, nullable=False)
    
    users = relationship('User', secondary='user_role', back_populates='roles')

class UserRole(Base):
    __tablename__ = 'user_role'
    
    user_id = Column(Integer, ForeignKey('users.id'), primary_key=True)
    role_id = Column(Integer, ForeignKey('roles.id'), primary_key=True)

# 创建数据库连接
engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(engine)

# 创建会话
Session = sessionmaker(bind=engine)
session = Session()

# 创建用户和角色对象
user1 = User(username='user1')
user2 = User(username='user2')
role1 = Role(name='role1')
role2 = Role(name='role2')

# 将用户添加到角色
role1.users.append(user1)
role2.users.append(user2)

# 提交更改
session.add_all([user1, user2, role1, role2])
session.commit()

# 查询用户的角色
user = session.query(User).filter_by(username='user1').first()
print(user.roles)  # 输出: [<Role(name='role1')>]

在上述示例中,我们使用了 append 方法将用户对象添加到相应的角色对象中,建立了多对多关系。请注意,具体的用法可能会根据你的数据模型和需求有所不同,但 append 方法通常用于建立多对多或一对多关系。