I have several types of user account records. I'm trying to use
joined-table inheritance to manage them, but I can't figure out how to
create an instance of account type B based on an instance of account
type A.
I'm using 0.4.8. Is this possible? Is it sane?
def experiment_part1():
# Otto registers with a password....
otto = PasswordUser('otto')
otto.password = 'honk'
session.add(otto)
session.flush()
def experiment_part2():
# ...later, otto wants to log in using kerberos or openid or
something. I need
# to create an ExternalUser instance based on the existing User
instance.
global otto
otto = session.query(User).filter_by(username='otto').one()
### Set up
import sqlalchemy
from sqlalchemy.schema import Table, Column, ForeignKey
from sqlalchemy.types import String, Unicode, Integer
from sqlalchemy.orm import mapper, class_mapper
metadata = sqlalchemy.MetaData(bind='sqlite:///:memory:')
Session = sqlalchemy.orm.sessionmaker()
session = Session(bind=metadata.bind)
### Tables
user_table = Table('users', metadata,
Column('user_id', Integer, primary_key=True),
Column('username', Unicode(60), nullable=False),
)
password_user_table = Table('password_users', metadata,
Column('password_user_id', Integer, primary_key=True),
Column('user_id', Integer, ForeignKey('users.user_id'),
nullable=False),
Column('password', String(40), nullable=False),
)
external_user_table = Table('external_users', metadata,
Column('external_user_id', Integer, primary_key=True,
autoincrement=False),
Column('user_id', Integer, ForeignKey('users.user_id'),
nullable=False),
)
### Classes
class User(object):
def __init__(self, username):
self.username = username
def __repr__(self):
return '<%s: %s>' % (self.__class__.__name__, self.username)
class PasswordUser(User): pass
class ExternalUser(User): pass
mapper(User, user_table)
mapper(ExternalUser, external_user_table, inherits=class_mapper(User))
mapper(PasswordUser, password_user_table, inherits=class_mapper(User))
metadata.create_all()
### Experiments
experiment_part1()
experiment_part2()
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---