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