ForeignKeyConstraint needs to go into __table_args__ when using declarative.
http://www.sqlalchemy.org/docs/orm/extensions/declarative.html#table-configuration On Nov 16, 2010, at 6:28 PM, Adrien wrote: > Hi list, > > Sorry if this is trivial, I'm relatively new to sqlalchemy. > I'm trying to set a one to many relationship between class Foo and > class Bar (ie Foo should have a list of Bars). Foo has a composite > primary key. > > ################################# > from sqlalchemy import * > from sqlalchemy.orm import * > from sqlalchemy.ext.declarative import declarative_base > > > Base = declarative_base() > > class Foo(Base): > __tablename__ = "foo" > one = Column(Integer, primary_key=True) > two = Column(Integer, primary_key=True) > > class Bar(Base): > __tablename__ = "bar" > id = Column(Integer, primary_key=True) > one_id = Column(Integer, nullable=False) > two_id = Column(Integer, nullable=False) > > ForeignKeyConstraint(["one_id", "two_id"], ["foo.one", "foo.two"]) > foo = relationship("Foo", backref = "bars") > > > metadata = Base.metadata > > engine = create_engine('sqlite:///:memory:', echo=True) > metadata.create_all(engine) > > from sqlalchemy.orm import sessionmaker > > # create a configured "Session" class > Session = sessionmaker(bind=engine) > > # create a Session > session = Session() > > foo = Foo() > foo.one = 1 > foo.two = 2 > session.add(foo) > session.commit() > ############################# > > I get the following message: > > sqlalchemy.exc.ArgumentError: Could not determine join condition > between parent/child tables on relationship Bar.foo. Specify a > 'primaryjoin' expression. > > > I tried to change the relationship line to: > foo = relationship("Foo", backref = "bars", primaryjoin=and_(one_id == > Foo.one, two_id==Foo.two ) ) > > but then I get this message: > > sqlalchemy.exc.ArgumentError: Could not determine relationship > direction for primaryjoin condition 'bar.one_id = foo.one AND > bar.two_id = foo.two', on relationship Bar.foo. Ensure that the > referencing Column objects have a ForeignKey present, or are otherwise > part of a ForeignKeyConstraint on their parent Table. > > Thank you for your help! > > -- > You received this message because you are subscribed to the Google Groups > "sqlalchemy" group. > To post to this group, send email to sqlalch...@googlegroups.com. > To unsubscribe from this group, send email to > sqlalchemy+unsubscr...@googlegroups.com. > For more options, visit this group at > http://groups.google.com/group/sqlalchemy?hl=en. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.