I'm having trouble with inheritance. I think I've followed the
examples/polymorph2.py paradigm, but I'm still getting issues. Here
is my boiled-down test case:
people = Table("people", pg_engine,
Column('key', String, primary_key=True),
Column('firstname', String),
Column('lastname', String),
)
bornpeople = Table("bornpeople", pg_engine,
Column('person', String, ForeignKey("people.key"),
primary_key=True, ),
Column('birthdate', DateTime, nullable=False),
)
prefs = Table("prefs", pg_engine,
Column('person', String, primary_key=True),
Column('email', String),
)
class Prefs(object):
pass
class Person(object):
pass
class BornPerson(Person):
pass
Prefs.mapper = mapper(Prefs, prefs)
Person.mapper = mapper(Person, people, order_by=people.c.lastname,
properties = {
'Prefs' : relation(Prefs.mapper, uselist=False,
primaryjoin=prefs.c.person==people.c.key,
foreignkey=prefs.c.person),
},
)
BornPerson.mapper = mapper(BornPerson, bornpeople,
inherits=Person.mapper,
)
Notice that BornPerson derives from Person, and I've used
inherits=Person.mapper in BornPerson.mapper. When I run the following:
p = Person.mapper.get('default')
print p.key
print p.Prefs.person
with Echo on, I get the following select statements:
[engine]: SELECT people.lastname AS people_lastname, people.firstname
AS people_firstname, people.key AS people_key
FROM people
WHERE people.key = %(pk_key)s ORDER BY people.lastname
[2006-04-12 17:05:35,157] [engine]: {'pk_key': 'default'}
default
[2006-04-12 17:05:35,164] [engine]: SELECT prefs.person AS
prefs_person, prefs.email AS prefs_email
FROM prefs, people
WHERE prefs.person = people.key
[2006-04-12 17:05:35,165] [engine]: {}
manager
Notice the second select statement is missing a "WHERE prefs.person =
'default'". If I change BornPeople to derive from 'object' instead:
class BornPerson(object):
pass
I get the correct select statements:
[2006-04-12 17:07:31,243] [engine]: SELECT people.lastname AS
people_lastname, people.firstname AS people_firstname, people.key AS
people_key
FROM people
WHERE people.key = %(pk_key)s ORDER BY people.lastname
[2006-04-12 17:07:31,243] [engine]: {'pk_key': 'default'}
default
[2006-04-12 17:07:31,251] [engine]: SELECT prefs.person AS
prefs_person, prefs.email AS prefs_email
FROM prefs
WHERE prefs.person = %(pk_person)s
[2006-04-12 17:07:31,251] [engine]: {'pk_person': 'default'}
My inheritance structure or procedure is flawed somewhere, but I'm
not sure where. Do I need MapperExtension to accomplish what I'm
trying to do? Any clues?
TIA,
--
Dimi Shahbaz, Software Engineer Specialist
California PASS Program
www.cyberhigh.fcoe.k12.ca.us
-------------------------------------------------------
This SF.Net email is sponsored by xPML, a groundbreaking scripting language
that extends applications into web and mobile media. Attend the live webcast
and join the prime developer group breaking into this new coding territory!
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=110944&bid=241720&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
Sqlalchemy-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users