hey Robert -

youre exactly right, since you are updating just the "id" on the object you are putting it into a state that the ORM is not designed to respond to, where the "id" is updated but not the actual property (the ORM thinks youre not dealing with integer ids explicitly). as it turns out I was setting out to add a "refresh" method anyway, so now its there.

if you SVN up and then throw an "objectstore.refresh(milk)" on the second to last line of your program, you get the correct result now.

- mike


On Feb 27, 2006, at 10:49 AM, Robert E. Anderson wrote:

First of I apologize for (a) Not knowing Python all that well (< 2 months), (b) Not reading through the SQLAlchemy source, and (c) Not looking through the archives for the correct way to post example code. That said, here's
what I think should be working that is not.

I have a table "gen_item" which contains a ForeignKey Reference to a code
table "state_code".

If I create an ORM instance with a mapper and change the instances foreign key column "state_id" the relation to the "state_code" table doesn't get updated
and I can't find a method that might refresh its content.

Here is a complete example as simple as I think I can get a full example.

Just in case it gets eaten by the mail system here's a URL to the same code:
        http://www.sr.unh.edu/~rea/SQLAlchemy/testFKrelation.py

from sqlalchemy import *

class State(object): pass
class GenItem(object): pass

engine = create_engine('sqlite', {'filename':'testFKrelation.db'})

GenItem.t = Table('gen_item', engine, autoload=True)
State.t = Table('state_code', engine, autoload=True)

print dir(GenItem)
if GenItem.t is None:
    print "Creating Tables"
    State.t = Table(            # State Codes
        'state_code', engine,
        Column('state_id', Integer, primary_key=True),
        Column('state_name', String(12)),
        redefine=True)
    State.t.create()
    State.t.insert().execute(
        {'state_id':0, 'state_name':'Have'},
        {'state_id':1, 'state_name':'Need'})
    GenItem.t = Table(             # Generic Items
        'gen_item', engine,
        Column('item_id', Integer, Sequence('s_item_id'),
               primary_key=True),
Column('state_id', Integer, ForeignKey ("state_code.state_id")),
        Column('item_name', String(30)),
        redefine=True)
    GenItem.t.create()
    GenItem.t.insert().execute(
        {'item_id':5, 'item_name':'Milk', 'state_id':0},
        {'item_id':6, 'item_name':'Bread', 'state_id':1})
    engine.commit()


State.m = mapper(State, State.t)
GenItem.m = mapper( GenItem, GenItem.t, order_by=GenItem.t.c.item_name,
                    properties={ 'state':relation(State.m)})

milk = GenItem.m.get_by_item_id(5)
print "I %s %s(state_id=%d)"%(
    milk.item_name, milk.state.state_name, milk.state_id)
if milk.state_id:
    milk.state_id = 0
    print "changed from Want to Have"
else:
    milk.state_id = 1
    print "changed from Have to Want"
objectstore.commit()
# If the above commit doesn't update the relation
# something like objectstore.freshen(milk.state) would be helpful
print "I %s %s(state_id=%d)"%(
    milk.item_name, milk.state.state_name, milk.state_id)



--
--------------------------------------------------------------
 Robert E. Anderson                     email: [EMAIL PROTECTED]
 Systems Programmer                     phone: (603) 862-3489
 UNH Research Computing Center            fax: (603) 862-1761
--------------------------------------------------------------


-------------------------------------------------------
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



-------------------------------------------------------
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

Reply via email to