gpt4 book ai didi

python - SQLAlchemy 双向关联代理

转载 作者:太空宇宙 更新时间:2023-11-03 11:53:56 29 4
gpt4 key购买 nike

我正在尝试使用 SQLAlchemy 创建一个简单的多对多关系,其中包含一个映射表,该映射表包含有关它所表示的与两端关联代理的关系的元数据。但是,我似乎无法让它工作。这是我一直在努力弄清楚的玩具示例:

Base = declarative_base()


def bar_creator(bar):

_ = FooBar(bar=bar)
return bar


class Foo(Base):

__tablename__ = 'foo'

id = Column(Integer, primary_key=True)
name = Column(String)
bars = association_proxy('bar_associations', 'bar',
creator=bar_creator)


def foo_creator(foo):

_ = FooBar(foo=foo)
return foo


class Bar(Base):

__tablename__ = 'bar'

id = Column(Integer, primary_key=True)
name = Column(String)
foos = association_proxy('foo_associations', 'foo',
creator=foo_creator)


class FooBar(Base):

__tablename__ = 'fooBar'

foo_id = Column(Integer, ForeignKey('foo.id'), primary_key=True)
bar_id = Column(Integer, ForeignKey('bar.id'), primary_key=True)
bazed = Column(Boolean)
foo = relationship(Foo, backref='bar_associations')
bar = relationship(Bar, backref='foo_associations')


Base.metadata.create_all(engine)
make_session = sessionmaker(bind=engine)
session = make_session()
foo0 = Foo(name='foo0')
session.add(foo0)
bar0 = Bar(name='bar0')
foo0.bars.append(bar0)

我添加了 creator 函数,这样我就可以避免编写一个不适用于我的实际用例(采用单个参数)的 __init__,并包括创建每个中的 FooBar 因为我在一些文档中读到被附加的项目需要已经有一个与之关联的链接表实例。我确定我只是遗漏了一些明显的东西(或者甚至可能试图做一些无法完成的事情),但是在深入研究文档和谷歌搜索之后,我无法弄清楚为什么它不起作用.我做错了什么?

最佳答案

您的问题出在 creator 上:它应该返回 FooBar 的新实例,而不是 barfoo:

def bar_creator(value):
return FooBar(bar=value)

foo_creator 类似。

关于python - SQLAlchemy 双向关联代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18412646/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com