[BangPypers] howto Sqlalchemy atomic transaction ??

Saju M sajuptpm at gmail.com
Mon Nov 21 12:19:54 CET 2011


Model
========
class VDCTemplates(DeclarativeBase):
    __tablename__='cd_vdc_templates'
    id = Column(Unicode(50), primary_key=True)
    vdc_id=Column(Unicode(50), ForeignKey('cd_vdc.id', ondelete="CASCADE"))
    template_id=Column(Unicode(50),
ForeignKey('cd_account_templates.id', ondelete="CASCADE"))
    account_id=Column(Unicode(50), ForeignKey('cd_accounts.id',
ondelete="CASCADE"))


code
======
acc_template=self.create_template_data()
DBSession.add(acc_template)

vdc_template = VDCTemplates()
vdc_template.account_id  = account_id
vdc_template.vdc_id      = vdc_id
vdc_template.template_id = acc_template.id
DBSession.add(vdc_template)




* Getting IntegrityError error
(IntegrityError) (1452, 'Cannot add or update a child row: a foreign
key constraint fails (`my_cms_ee/cd_vdc_templates`, CONSTRAINT
`cd_vdc_templates_ibfk_1` FOREIGN KEY (`template_id`) REFERENCES
`cd_account_templates` (`id`) ON DELETE CASCADE)') u'INSERT INTO
cd_vdc_templates (id, vdc_id, template_id, account_id) VALUES (%s, %s,
%s, %s)' ['6ae8e571-ebce-6977-150d-09f7127acb5b',
'ab977753-de54-6e3b-3d7c-644d12f66d63',
'8e0ce099-4ba7-2e01-304c-edc18803fbce',
'b56bc9e3-288b-a98f-a974-b67f90970122']

* Its working, if i put transaction.commit() after
DBSession.add(acc_template), but that not atomic.

* Have any way to make it atomic  ???


More information about the BangPypers mailing list