Michael,

Thanks for the quick reply, I needed a bit of time to be able to get 
some more data on this.

Michael Bayer wrote:
> ...
> uh it depends on what "object.otherviewofsubobject" is...is that a  
> relation() ?  a python descriptor ?  if the latter, how does it  
> work ?  where does it get context from ?   seems like this is a simple  
> issue of issuing a SELECT on a connection outside of the current  
> transaction.
>   
They are both relation.  Ok, here some test code showing the problem, I 
hope this will allow you to give me some pointers.

consevent = session.query(db.consevent).get(1)
conseventMU = consevent.conseventmu
conseventMUview = consevent.vconseventmu
print 'conseventmu'
for item in conseventMU:
    print item
print 'conseventmu-VIEW'
for item in conseventMUview:
    print item


consItem = session.query(db.conseventmu).get(5)
consItem.description = u"Souris d'ageau"

session.flush()
session.refresh(consevent)
##consevent = session.query(db.consevent).get(1)  # this does not work 
either
conseventMU = consevent.conseventmu
conseventMUview = consevent.vconseventmu
print 'conseventmu'
for item in conseventMU:
    print item
print 'conseventmu-VIEW'
for item in conseventMUview:
    print item

Sample output - before update:

conseventmu
...
Conseventmu(conseventmuid=5, description=u"Souris d'agneau 
aaa23355bbbxxxxxx", created=datetime.date(2008, 5, 7), 
updated=datetime.date(2008, 5, 7), fk_conseventid=1, fk_ingrid=None, 
fk_recipeid=2, fk_courseid=6, fk_cbbottleid=None)
...
conseventmu-VIEW
...
Vconseventmu(conseventmuid=5, name=u'Foie Gras aux Epices', 
itemtype=u'R   ', description=u"Souris d'agneau aaa23355bbbxxxxxx", 
created=datetime.date(2008, 5, 7), updated=datetime.date(2008, 5, 7), 
fk_conseventid=1, fk_ingrid=None, fk_recipeid=2, fk_courseid=6, 
fk_cbbottleid=None)
...

Sample output - after update and flush:
conseventmu
...
Conseventmu(conseventmuid=5, description=u"Souris d'ageau", 
created=datetime.date(2008, 5, 7), updated=datetime.date(2008, 5, 7), 
fk_conseventid=1, fk_ingrid=None, fk_recipeid=2, fk_courseid=6, 
fk_cbbottleid=None)
...
conseventmu-VIEW
...
Vconseventmu(conseventmuid=5, name=u'Foie Gras aux Epices', 
itemtype=u'R   ', description=u"Souris d'agneau aaa23355bbbxxxxxx", 
created=datetime.date(2008, 5, 7), updated=datetime.date(2008, 5, 7), 
fk_conseventid=1, fk_ingrid=None, fk_recipeid=2, fk_courseid=6, 
fk_cbbottleid=None)
...

Some of my model (I hope I provide the relevant parts you need to be 
able to help me)- keep in mind that Vconseventmu is a FB view and not a 
real table (this is used mainly to show items in listctrl's in my 
wxPython application - there are no updates to it).

consevent = sao.mapper(Consevent, consevent_table,
    properties={
...
        'conseventmu': sao.relation(Conseventmu),
        'vconseventmu': sao.relation(Vconseventmu) #, 
enable_typechecks=False),
})

conseventmu = sao.mapper(Conseventmu, conseventmu_table,
    properties={
...
        'recipe': sao.relation(Recipe),
        'ingr_ls': sao.relation(Ingr_Ls),
        'consevent': sao.relation(Consevent),
})

vconseventmu = sao.mapper(Vconseventmu, vconseventmu_table,
    properties={
...
        'ingr_ls': sao.relation(Ingr_Ls),
        'recipe': sao.relation(Recipe),
        'consevent': sao.relation(Consevent),
})

vconseventmu_table = sa.Table(u'vconseventmu', metadata,
    sa.Column(u'conseventmuid', sa.Integer(), 
sa.ForeignKey(u'conseventmu.conseventmuid'), primary_key=True), # fake
    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')),
)

consevent_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)),
)

DDL for FB view:
CREATE VIEW VCONSEVENTMU(
    CONSEVENTMUID,
    NAME,
    ITEMTYPE,
    DESCRIPTION,
    CREATED,
    UPDATED,
    FK_CONSEVENTID,
    FK_INGRID,
    FK_RECIPEID,
    FK_COURSEID,
    FK_CBBOTTLEID)
AS
select item.conseventmuid,
       coalesce(rec.name, ingr.name),
       case when (item.fk_recipeid is not null) then 'R'
            else ' '
       end,
       item.description,
       item.created,
       item.updated,
       item.fk_conseventid,
       item.fk_ingrid,
       item.fk_recipeid,
       item.fk_courseid,
       item.fk_cbbottleid
from conseventmu item
left outer join recipe rec on item.fk_recipeid = rec.recipeid
left outer join ingr_ls ingr on item.fk_ingrid = ingr.ingrid

Best regards
Werner

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