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
-~----------~----~----~----~------~----~------~--~---

Reply via email to