you would need to query the database for an already existing Keyword object
first. I.e.:
existing_keyword = Session.query(Keyword).filter(Keyword.name=='test
image').first()
if existing_keyword is None:
existing_keyword = Keyword(name='test image')
There's a recipe that can help with the "create object if doesn't exist"
paradigm. That is at
http://www.sqlalchemy.org/trac/wiki/UsageRecipes/UniqueObject .
On Nov 18, 2010, at 12:56 PM, Sujeevan Rasaratnam wrote:
> Hello,
> I am new to SQLAlchemy and I couldn't find a way to properly associate many
> to many relation. My environment: python 2.6, SQLAlchemy 0.6.5, Postgres
> 8.4.5. How do I associate to a already existing row in many to many relation.
>
> ################
> class Keyword(Base):
> __tablename__ = 'keywords'
>
> id = Column(Integer, primary_key=True, autoincrement=True)
> name = Column(Unicode, unique=True, nullable=False)
> description = Column(Unicode, nullable=True)
>
> class ImageKeyword(Base):
> __tablename__ = 'image_keywords
> image_id = Column(Integer, ForeignKey('images.id', onupdate = 'CASCADE',
> ondelete = 'CASCADE'), primary_key=True)
> keyword_id = Column(Integer, ForeignKey('keywords.id', onupdate =
> 'CASCADE',
> ondelete = 'CASCADE'), primary_key=True)
>
> class Image(Base):
> __tablename__ = "images"
> id = Column(Integer, primary_key=True)
> name = Column(Unicode, unique=True, nullable=False)
>
> keywords = relationship(Image,
> secondary="image_keyword",
> backref='images')
> def addKeywords(self, keywords):
> for keyword in keywords:
> self.keywords.append(Keyword(name=keyword))
>
> # Add
> session = Session()
> i = Image()
> i.name = "image1"
> i.addKeyword(['test image', 'first image'])
> session.add(i)
> session.commit()
>
> i = Image()
> i.name = "image2"
> i.addKeyword(['test image'])
> session.add(i)
> session.commit()
> #This will fail because of the unique constraint of Keyword.name
> # What is the proper way?
>
> #########################
>
> Thank you
>
>
> Sujeevan Rasaratnam
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> 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 [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.