I'm newish to SqlAlchemy and for the life of me I can't figure out how
to properly set things up so that lookup tables(objects) are cached
and/or it is easy for new parent objects to associate to their
childing upon initialization.  See below for code snippet and sample
problem.

from sqlalchemy import *
#..other imports

metadata = MetaData()

item_types_table = Table('item_types', metadata,
    Column('id', Integer, autoincrement=False, primary_key = True),
    Column('name', String(50))
)

items_table = Table('items', metadata,
    Column('id', Integer, primary_key = True),
    Column('item_type_id', Integer, ForeignKey('item_types.id')),
    Column('name', String(150))
)

engine = create_engine('mysql://[EMAIL PROTECTED])  #example uri
engine.echo = True
metadata.create_all(engine)

# class definitions
class ItemType(object):
    def __init__(self, id, name=None):
        self.id = id
        self.name = name

class Item(object):
    def __init__(self, type_name, name):
       self.item_type =
session.query(ItemType).selectfirst(ItemType.c.name==type_name)
       #  ^^^^ Is there a better way to create this association?

       self.name = name


mapper(ItemType, item_types_table)
mapper(Item, item_table, properties = dict(
    item_type = relation(ItemType)
    )
)

session = create_session(bind_to=engine)

#create item types
t1 = ItemType(0, 'tool')
t2 = ItemType(1, 'widget')
session.save(t1)
session.save(t2)

# ####### Everything works above as expected

item1 =Item('tool', 'sample hammer')
item2 =Item(''tool', 'screwdriver'')

#end of code
####################

So two questions.
1) Upon encountering the last line of code, I see that when I look at
the SQL generated, i see that the select called in the Item __init__
method is sending a query again, instead of using what should in
theory by in the object cache for the exact same query.

2) Basically, I'm trying to get new Item objects to relate to the
correct Item Type via using the name to create the foreignkey (id)
relationship.  So the questions is, is the Item Init method setup
right for this, or is there a better way?


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to