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