Hi,
I ran into an error trying to use two mappers for the same class. I
encounter the error "AttributeError: type object 'MyObject' has no
attribute 'my_attribute'". Using the first mapper before creating the
other seems to corrupt the mapped class. Here is an example:
from sqlalchemy import *
from sqlalchemy.orm import *
uri = r'sqlite:///bug.db'
metadata = MetaData()
class AA(object):
pass
class BB(object):
pass
aa_table = Table('aas', metadata,
Column('id', Integer, primary_key=True),
Column('stuff', Integer, default=1))
bb_table = Table('bbs', metadata,
Column('id', Integer, primary_key=True),
Column('other_stuff', Integer, default=2),
Column('aa_id', Integer, ForeignKey('aas.id')))
aa_first_mapper = mapper(AA, aa_table, entity_name='first')
bb_first_mapper = mapper(BB, bb_table, entity_name='first')
aa_first_mapper.add_property('bbs', relation(bb_first_mapper,
backref='aa'))
def fill_db():
metadata.connect(uri)
metadata.bind.echo = False
session = create_session()
metadata.drop_all()
metadata.create_all()
aa1 = AA()
bb1 = BB()
bb1.aa = aa1
bb2 = BB()
bb2.aa = aa1
session.save(aa1, entity_name='first')
session.save(bb1, entity_name='first')
session.save(bb2, entity_name='first')
session.flush()
session.clear()
fill_db()
def access_db():
session = create_session()
aas = session.query(aa_first_mapper).select()
print 'bbs in aas[0] count =', len(aas[0].bbs)
access_db()
# commenting these 3 lines of code will fix the bug!?
aa_second_mapper = mapper(AA, aa_table, entity_name='second')
bb_second_mapper = mapper(BB, bb_table, entity_name='second')
aa_second_mapper.add_property('bbs', relation(bb_second_mapper,
backref='aa'))
access_db() # crash :(
>From what I understand of the documentation, I should be able to do
this using different entity names for the different mappers. Or is it
that once an object has been committed to the db using a certain
entity name, it can only be manipulated with this same entity name?
Thanks
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---