Hi All,
Say I am creating an application whereby 'organizations' can register
and have multiple 'pages'. So, I have 'org' table and 'page' table.
I wish to maintain the total space used by an orgainzation in
org.size_bytes. So, whenever a page is added, updated or deleted, I
have to increment or decrement org.size_bytes accordingly.
Thinking MapperExtension would be the best fit for this requirement (is
not so?), I write this test code given below, which passes perfectly.
But strangely, while I see the database table (using pgAdmin client)
after executing the code, org.size_bytes is not updated!
Help needed!
thanks
sanjay
from sqlalchemy import *
from sqlalchemy.ext.assignmapper import assign_mapper
from sqlalchemy.ext.sessioncontext import SessionContext
context = SessionContext(create_session)
session = context.current
metadata = BoundMetaData('postgres://user:[EMAIL PROTECTED]/mydb',
echo=False)
# table definitions
org_table = Table('org', metadata,
Column('id', Integer, primary_key=True),
Column('name', Unicode(30), nullable=False),
Column('size_bytes', Integer, nullable=False, default=0))
page_table = Table('page', metadata,
Column('id', Integer, primary_key=True),
Column('org_id', Integer, ForeignKey('org.id')),
Column('content', Unicode))
metadata.drop_all()
metadata.create_all()
class Org(object):
pass
class Page(object):
pass
class PageExtension(MapperExtension):
def before_insert(self, mapper, connection, instance):
instance.org.size_bytes += len(instance.content)
assign_mapper(context, Org, org_table, properties = {
'pages' : relation(Page, backref='org')})
assign_mapper(context, Page, page_table, extension=PageExtension(),
properties = {'content' : deferred(page_table.c.content)})
w = Org(name="My Site")
session.flush()
w.pages.append(Page(content="My Home Page"))
session.flush()
assert w.size_bytes == len("My Home Page") # passes
del w
w = Org.get_by(name="My Site")
assert w.size_bytes == len("My Home Page") # passes!
# now go and see the database table org!
# strange that org.size_bytes is not updated!!
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---