passive_deletes doesnt prevent SA from operating upon rows which are
currently represented in the Session, only from loading in not-already-
loaded rows from the databse in order to ensure they are all detached
ro removed. Instead, set viewonly=True on "Consevent.vconseventmu".
On Sep 1, 2008, at 10:52 AM, Werner F. Bruhin wrote:
>
> I have a problem deleting a Consevent instance and get the exception
> shown further below.
>
> Relevant part of my model:
> class Consevent(Base):
> __table__ = sa.Table(u'consevent', metadata,
> sa.Column(u'conseventid', sa.Integer(),
> sa.Sequence('gen_consevent_conseventid'), primary_key=True,
> nullable=False),
> sa.Column(u'description', sa.String(length=25,
> convert_unicode=False)),
> sa.Column(u'conseventdate', sa.DateTime(timezone=False)),
> sa.Column(u'fk_reasonid', sa.Integer(),
> sa.ForeignKey(u'reason_ls.reasonid')),
> sa.Column(u'created', sa.Date()),
> sa.Column(u'updated', sa.Date()),
> sa.Column(u'notes', sa.TEXT(length=32000, convert_unicode=True)),
> )
>
> reason_ls = sao.relation(Reason_Ls)
> conseventgl = sao.relation('Conseventgl', cascade="all, delete,
> delete-orphan", backref='conseventgl')
> conseventit = sao.relation('Conseventit', cascade="all, delete,
> delete-orphan", backref='conseventit')
> conseventmu = sao.relation('Conseventmu', cascade="all, delete,
> delete-orphan", backref='consevent')
> vconseventmu = sao.relation('Vconseventmu', backref='consevent',
> passive_deletes=True)
>
> class Vconseventmu(Base):
> # note that this is a view in the Firebird SQL db
> __table__ = sa.Table(u'vconseventmu', metadata,
> sa.Column(u'conseventmuid', sa.Integer(),
> sa.ForeignKey(u'conseventmu.conseventmuid'), primary_key=True),
> sa.Column(u'name', sa.String(length=50, convert_unicode=False)),
> sa.Column(u'itemtype', sa.String(length=1, convert_unicode=False)),
> sa.Column(u'description', sa.String(length=50,
> convert_unicode=False)),
> sa.Column(u'created', sa.Date()),
> sa.Column(u'updated', sa.Date()),
> sa.Column(u'fk_conseventid', sa.Integer(),
> sa.ForeignKey(u'consevent.conseventid')),
> sa.Column(u'fk_ingrid', sa.Integer(),
> sa.ForeignKey(u'ingr_ls.ingrid')),
> sa.Column(u'fk_recipeid', sa.Integer(),
> sa.ForeignKey(u'recipe.recipeid')),
> sa.Column(u'fk_courseid', sa.Integer(),
> sa.ForeignKey(u'course_ls.courseid')),
> sa.Column(u'fk_cbbottleid', sa.Integer(),
> sa.ForeignKey(u'cbbottle.cbbottleid')),
> )
>
> ingr_ls = sao.relation(Ingr_Ls)
> recipe = sao.relation(Recipe)
> course_ls = sao.relation(Course_Ls)
> cbbottle = sao.relation(Cbbottle)
>
>
> To delete a consevent I do:
> for dbitem in self.dbItem.conseventit:
> # clear bottag table foreign key for consumption
> utils.BottleTagsClearConsumption(self.Getds(),
> dbitem.consumption)
>
> self.Getds().flush()
>
> self.Getds().delete(self.dbItem)
>
> self.dbItem is an instance of Consevent.
>
> Can anyone see what I am doing wrong.
>
> Werner
>
>
> **** Mon Sep 01 16:36:24 2008 **** Version: 3.0.416.1 **** wxV:
> 2.8.8.1
> (msw-unicode) *****
> Traceback (most recent call last):
> File "C:\Dev\twcb\Program\dialogconsevent.py", line 752, in
> OnDeleteButton
> if self.DeleteConsEvent():
> File "C:\Dev\twcb\Program\dialogconsevent.py", line 797, in
> DeleteConsEvent
> self.Getds().commit()
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\orm\session.py",
> line 663, in commit
> self.transaction.commit()
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\orm\session.py",
> line 376, in commit
> self._prepare_impl()
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\orm\session.py",
> line 360, in _prepare_impl
> self.session.flush()
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\orm\session.py",
> line 1409, in flush
> flush_context.execute()
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\orm\unitofwork.py",
> line 265, in execute
> UOWExecutor().execute(self, tasks)
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\orm\unitofwork.py",
> line 753, in execute
> self.execute_save_steps(trans, task)
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\orm\unitofwork.py",
> line 768, in execute_save_steps
> self.save_objects(trans, task)
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\orm\unitofwork.py",
> line 759, in save_objects
> task.mapper._save_obj(task.polymorphic_tosave_objects, trans)
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\orm\mapper.py",
> line 1182, in _save_obj
> c = connection.execute(statement.values(value_params), params)
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\engine\base.py",
> line 848, in execute
> return Connection.executors[c](self, object, multiparams, params)
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\engine\base.py",
> line 899, in execute_clauseelement
> return self._execute_compiled(elem.compile(dialect=self.dialect,
> column_keys=keys, inline=len(params) > 1), distilled_params=params)
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\engine\base.py",
> line 911, in _execute_compiled
> self.__execute_raw(context)
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\engine\base.py",
> line 920, in __execute_raw
> self._cursor_execute(context.cursor, context.statement,
> context.parameters[0], context=context)
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\engine\base.py",
> line 964, in _cursor_execute
> self._handle_dbapi_exception(e, statement, parameters, cursor)
> File
> "c:\python25\lib\site-packages\sqlalchemy-0.5.0beta3-py2.5.egg
> \sqlalchemy\engine\base.py",
> line 946, in _handle_dbapi_exception
> raise exc.DBAPIError.instance(statement, parameters, e,
> connection_invalidated=is_disconnect)
> ProgrammingError: (ProgrammingError) (-150, 'isc_dsql_prepare: \n
> cannot update read-only view VCONSEVENTMU') 'UPDATE vconseventmu SET
> fk_conseventid=? WHERE vconseventmu.conseventmuid = ?' [None, 3]
>
>
> >
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---