Thanks, I want to create a relationship between two contact object and add more data like relation type to the relation table. For example Contact with contact id 1 and contact id 2 has friend relationship type and some more data. Exactly i want a self association relation.
On Wed, Sep 24, 2014 at 7:47 PM, Simon King <si...@simonking.org.uk> wrote: > OK, firstly I'm not sure you want to be using your contactrelation > table both as a "secondary" as well as a mapped class. You generally > want one or the other. See the note at the bottom of the "Association > Object" section of > > http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#association-object > > For your specific error, you could try defining the primaryjoin and > secondaryjoin conditions like this, but I've honestly no idea if it is > the right approach: > > primaryjoin=id=='foreign(contactrelation.c.from_contact_id)', > secondaryjoin=id=='foreign(contactrelation.c.to_contact_id)', > > This definitely seems fishy to me though - I'm not sure if SA will > understand that the 2 "id" columns there correspond to 2 different > instances of the Contact class. > > Unless you have a particular need for the "secondary" mechanism, I > would rewrite it so that ContactRelation has "from_contact" and > "to_contact" relationships, then use an association proxy to hide the > ContactRelation when you don't need it explicitly: > > http://docs.sqlalchemy.org/en/rel_0_9/orm/extensions/associationproxy.html > > > Hope that helps, > > Simon > > > On Wed, Sep 24, 2014 at 2:15 PM, Mohammad Reza Kamalifard > <mr.kamalif...@gmail.com> wrote: > > Here is the whole Contact and ContactRelation model > > class Contact(db.Model): > > __tablename__ = 'contact' > > id = db.Column(db.Integer, primary_key=True) > > name = db.Column(db.Unicode(120), nullable=False, unique=False) > > created_on = db.Column(db.DateTime, default=datetime.utcnow) > > birthday = db.Column(db.DateTime) > > background = db.Column(db.Text) > > photo = db.Column(db.Unicode(120)) > > user_id = db.Column(db.Integer, db.ForeignKey('user.id')) > > > > to_contacts = db.relationship('Contact', > > secondary='contactrelation', > > primaryjoin=id== 'contactrelation.c.from_contact_id', > > secondaryjoin=id== 'contactrelation.c.to_contact_id', > > backref = 'from_contacts') > > > > class ContactRelation(db.Model): > > __tablename__ = 'contactrelation' > > id = db.Column(db.Integer, primary_key=True) > > from_contact_id = db.Column(db.Integer, db.ForeignKey('contact.id')) > > to_contact_id = db.Column(db.Integer, db.ForeignKey('contact.id')) > > relation_type = db.Column(db.String(100), nullable=True) > > > > > > Thanks, > > > > Mohammad Reza > > > > > > On Wed, Sep 24, 2014 at 2:38 PM, Simon King <si...@simonking.org.uk> > wrote: > >> > >> Could you show the whole model and table definition? I've lost track > >> of exactly what you've written. > >> > >> Thanks, > >> > >> Simon > >> > >> On Wed, Sep 24, 2014 at 11:15 AM, Mohammad Reza Kamalifard > >> <mr.kamalif...@gmail.com> wrote: > >> > thanks Mike > >> > with new to_contacts relationship i have new error > >> > ArgumentError: Could not locate any relevant foreign key columns for > >> > primary > >> > join condition 'contact.id = :param_1' on relationship > >> > Contact.to_contacts. > >> > Ensure that referencing columns are associated with a ForeignKey or > >> > ForeignKeyConstraint, or are annotated in the join condition with the > >> > foreign() annotation. > >> > > >> > On Wed, Sep 24, 2014 at 5:49 AM, Michael Bayer > >> > <mike...@zzzcomputing.com> > >> > wrote: > >> >> > >> >> to_contacts = db.relationship('Contact', > >> >> secondary='contactrelation', > >> >> primaryjoin='id== ContactRelation.from_contact_id', > >> >> secondaryjoin='id== ContactRelation.to_contact_id', > >> >> > >> >> or > >> >> > >> >> to_contacts = db.relationship('Contact', > >> >> secondary=contactrelation, > >> >> primaryjoin=id== contactrelation.c.from_contact_id, > >> >> secondaryjoin=id== contactrelation.c.to_contact_id, > >> >> > >> >> see examples: > >> >> > >> >> > >> >> > >> >> > http://docs.sqlalchemy.org/en/rel_0_9/orm/relationships.html#self-referential-many-to-many-relationship > >> >> > >> >> > >> >> > >> >> > >> >> On Sep 23, 2014, at 5:26 PM, Mohammad Reza Kamalifard > >> >> <mr.kamalif...@gmail.com> wrote: > >> >> > >> >> Using contactrelation.from_contact_id ? > >> >> I have AttributeError: 'Table' object has no attribute > >> >> 'from_contact_id' > >> >> Error. > >> >> > >> >> On Tue, Sep 23, 2014 at 4:48 PM, Michael Bayer > >> >> <mike...@zzzcomputing.com> > >> >> wrote: > >> >> > > >> >> > table name, not class name, please see > >> >> > > >> >> > > http://docs.sqlalchemy.org/en/rel_0_9/orm/extensions/declarative.html#declarative-many-to-many > >> >> > > >> >> > > >> >> > On Sep 23, 2014, at 8:33 AM, Mohammad Reza Kamalifard > >> >> > <mr.kamalif...@gmail.com> wrote: > >> >> > > >> >> > In my application with SQLAlchemy i need to create many to many > >> >> > relationship between two contact object also sotre data for each of > >> >> > relatioship here is my Contact model > >> >> > > >> >> > class Contact(db.Model): > >> >> > __tablename__ = 'contact' > >> >> > id = db.Column(db.Integer, primary_key=True) > >> >> > name = db.Column(db.Unicode(120), nullable=False, unique=False) > >> >> > user_id = db.Column(db.Integer, db.ForeignKey('user.id')) > >> >> > > >> >> > to_contacts = db.relationship('Contact', > >> >> > secondary='ContactRelation', > >> >> > primaryjoin='id== > >> >> > ContactRelation.from_contact_id', > >> >> > secondaryjoin='id== > >> >> > ContactRelation.to_contact_id', > >> >> > > >> >> > backref='from_contacts') > >> >> > > >> >> > > >> >> > and my association class ContactRelation: > >> >> > > >> >> > class ContactRelation(db.Model): > >> >> > __tablename__ = 'contactrelation' > >> >> > id = db.Column(db.Integer, primary_key=True) > >> >> > from_contact_id = db.Column(db.Integer, > >> >> > db.ForeignKey('contact.id')) > >> >> > to_contact_id = db.Column(db.Integer, > >> >> > db.ForeignKey('contact.id')) > >> >> > relation_type = db.Column(db.String(100), nullable=True) > >> >> > > >> >> > every thing seems good but i have error : > >> >> > AttributeError: type object 'ContactRelation' has no attribute 'c' > >> >> > > >> >> > > >> >> > > >> >> > > >> >> > -- > >> >> > You received this message because you are subscribed to the Google > >> >> > Groups "sqlalchemy" group. > >> >> > To unsubscribe from this group and stop receiving emails from it, > >> >> > send > >> >> > an email to sqlalchemy+unsubscr...@googlegroups.com. > >> >> > To post to this group, send email to sqlalchemy@googlegroups.com. > >> >> > Visit this group at http://groups.google.com/group/sqlalchemy. > >> >> > For more options, visit https://groups.google.com/d/optout. > >> >> > > >> >> > > >> >> > -- > >> >> > You received this message because you are subscribed to a topic in > >> >> > the > >> >> > Google Groups "sqlalchemy" group. > >> >> > To unsubscribe from this topic, visit > >> >> > > https://groups.google.com/d/topic/sqlalchemy/OeLrx74p5vY/unsubscribe. > >> >> > To unsubscribe from this group and all its topics, send an email to > >> >> > sqlalchemy+unsubscr...@googlegroups.com. > >> >> > To post to this group, send email to sqlalchemy@googlegroups.com. > >> >> > Visit this group at http://groups.google.com/group/sqlalchemy. > >> >> > For more options, visit https://groups.google.com/d/optout. > >> >> > >> >> -- > >> >> You received this message because you are subscribed to the Google > >> >> Groups > >> >> "sqlalchemy" group. > >> >> To unsubscribe from this group and stop receiving emails from it, > send > >> >> an > >> >> email to sqlalchemy+unsubscr...@googlegroups.com. > >> >> To post to this group, send email to sqlalchemy@googlegroups.com. > >> >> Visit this group at http://groups.google.com/group/sqlalchemy. > >> >> For more options, visit https://groups.google.com/d/optout. > >> >> > >> >> > >> >> -- > >> >> You received this message because you are subscribed to a topic in > the > >> >> Google Groups "sqlalchemy" group. > >> >> To unsubscribe from this topic, visit > >> >> https://groups.google.com/d/topic/sqlalchemy/OeLrx74p5vY/unsubscribe > . > >> >> To unsubscribe from this group and all its topics, send an email to > >> >> sqlalchemy+unsubscr...@googlegroups.com. > >> >> To post to this group, send email to sqlalchemy@googlegroups.com. > >> >> Visit this group at http://groups.google.com/group/sqlalchemy. > >> >> For more options, visit https://groups.google.com/d/optout. > >> > > >> > > >> > -- > >> > You received this message because you are subscribed to the Google > >> > Groups > >> > "sqlalchemy" group. > >> > To unsubscribe from this group and stop receiving emails from it, send > >> > an > >> > email to sqlalchemy+unsubscr...@googlegroups.com. > >> > To post to this group, send email to sqlalchemy@googlegroups.com. > >> > Visit this group at http://groups.google.com/group/sqlalchemy. > >> > For more options, visit https://groups.google.com/d/optout. > >> > >> -- > >> You received this message because you are subscribed to a topic in the > >> Google Groups "sqlalchemy" group. > >> To unsubscribe from this topic, visit > >> https://groups.google.com/d/topic/sqlalchemy/OeLrx74p5vY/unsubscribe. > >> To unsubscribe from this group and all its topics, send an email to > >> sqlalchemy+unsubscr...@googlegroups.com. > >> To post to this group, send email to sqlalchemy@googlegroups.com. > >> Visit this group at http://groups.google.com/group/sqlalchemy. > >> For more options, visit https://groups.google.com/d/optout. > > > > > > -- > > You received this message because you are subscribed to the Google Groups > > "sqlalchemy" group. > > To unsubscribe from this group and stop receiving emails from it, send an > > email to sqlalchemy+unsubscr...@googlegroups.com. > > To post to this group, send email to sqlalchemy@googlegroups.com. > > Visit this group at http://groups.google.com/group/sqlalchemy. > > For more options, visit https://groups.google.com/d/optout. > > -- > You received this message because you are subscribed to a topic in the > Google Groups "sqlalchemy" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/sqlalchemy/OeLrx74p5vY/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > sqlalchemy+unsubscr...@googlegroups.com. > To post to this group, send email to sqlalchemy@googlegroups.com. > Visit this group at http://groups.google.com/group/sqlalchemy. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.