在SQLAlchemy中关联多个关系中的对象

2024-04-19 07:47:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用SQLAlchemy通过双向多对多关系关联两个数据库对象。我需要关联存在于连接表中。表和数据存在于SQLite3数据库中。在

下面是一个简单的例子。在

Base = declarative_base()

class Colour (Base):
    __tablename__ = 'colours'
    id = Column("id", Integer, primary_key=True)
    name = Column("name", String)
    vehicles = association_proxy('vehicles_and_colours', 'vehicles')

class Vehicle (Base):
    __tablename__ = 'vehicles'
    id = Column("id", Integer, primary_key=True)
    name = Column("name", String)
    colours = association_proxy('vehicles_and_colours', 'colours')

class ColourVehicle (Base):
    __tablename__ = 'vehicles_and_colours'
    colour_id = Column('colour_fk', Integer, ForeignKey('colours.id'), primary_key=True)
    vehicle_id = Column('vehicle_fk', Integer, ForeignKey('vehicles.id'), primary_key=True)

    colours = relationship(Colour, backref=backref("vehicles_and_colours"))
    vehicles = relationship(Vehicle, backref=backref("vehicles_and_colours"))

blue = session.query(Colour).filter(Colour.name == "blue").first()
car = session.query(Vehicle).filter(Vehicle.name == "car").first()

blue.vehicles.append(car)

这给了我一个错误:

^{pr2}$

我做错什么了?在


Tags: andkeynameidtruebasecolumninteger
1条回答
网友
1楼 · 发布于 2024-04-19 07:47:07

关联代理要求目标对象具有一个将创建适当的中间对象的单参数构造函数,或者指定creator来确定如何创建ColorVehicle:

vehicles = association_proxy('vehicles_and_colours', 'vehicles', 
                creator=lambda vehicle: ColorVehicle(vehicle=vehicle))

colours = association_proxy('vehicles_and_colours', 'colours', 
               creator=lambda color: ColorVehicle(color=color))

详细记录在:

https://docs.sqlalchemy.org/en/latest/orm/extensions/associationproxy.html#creation-of-new-values

相关问题 更多 >