On Jun 22, 2011, at 2:53 AM, Fayaz Yusuf Khan wrote:
> On Monday, June 20, 2011 07:34:42 PM Michael Bayer wrote:
>> SQLA doesn't automatically "create" any objects so you'd need to create the
>> Parent object yourself, but you'd also use relationship():
>>
>> class Child(Base):
>> parent_name = Column(String, ForeignKey('parent.name'))
>> parent = relationship(Parent)
>>
>> def __init__(self, name):
>> self.parent = Parent(name)
>>
>>
>> relationship() would handle the "parent_name" assignment as well as adding
>> Parent to the Session.
>
> I did that. But later on, when I had to insert a Child to an existing Parent,
> it raised IntegrityErrors once again.
> With some IRC help, I found a solution using the UniqueObject recipe
> (http://www.sqlalchemy.org/trac/wiki/UsageRecipes/UniqueObject). I was about
> to use that in my code, but then I saw that there's a method called
> session.merge(), which apears to do the same thing.
>
> Please correct me if I'm wrong.
The unique object recipe and merge() both have in common that they perform a
SELECT, then an INSERT if row not found, though the unique object recipe is
used via a creational pattern, and also supports identification of the object
by any criterion, not just the primary key. merge() is used via a
transference of state pattern and only operates on primary key.
--
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.