Hi,

I am using sqlalchemy and have following problem:

it happens to me that I get a row (mapped to an object using
sqa.orm.mapper) and write to an entry, like user.age = 33. When
user.age already was 33, then when I do session.flush(), the "age"
column still gets updated with the value 33. It's a correct behavior,
since it does not udpate it to a wrong value. But I did some tests
(interactive Python sessions) to test this behavior and sqlalchemy
always did not update elements that got written in an instance of
mapped objects, but the value did not change during the write.

e.g. consider this test code (this is from my testing interactive
session):
import sqlalchemy as sqa

db = sqa.create_engine('sqlite://')
meta = sqa.MetaData(db)
meta.engine.echo = True
users = sqa.Table('users',meta,
                sqa.Column('id',sqa.Integer,primary_key=True),
                sqa.Column('fname',sqa.String),
                sqa.Column('lname',sqa.String),
        sqa.Column('age'  ,sqa.Integer)
        )
users.create()
class User(object):
        pass
sqa.mapper(User,users)
ses = sqa.create_session()
me = User()
me.fname = 'Boris'
me.age = 22
ses.save(me)

CREATE TABLE users (
        id INTEGER NOT NULL,
        fname TEXT,
        lname TEXT,
        age INTEGER,
        PRIMARY KEY (id)
)


2007-08-04 00:55:46,201 INFO sqlalchemy.engine.base.Engine.0x..cL None
2007-08-04 00:55:46,203 INFO sqlalchemy.engine.base.Engine.0x..cL
COMMIT
>>> ses.flush()
2007-08-04 00:55:56,731 INFO sqlalchemy.engine.base.Engine.0x..cL
BEGIN
2007-08-04 00:55:56,734 INFO sqlalchemy.engine.base.Engine.0x..cL
INSERT INTO users (fname, lname, age) VALUES (?, ?, ?)
2007-08-04 00:55:56,735 INFO sqlalchemy.engine.base.Engine.0x..cL
['Boris', None, 22]
2007-08-04 00:55:56,736 INFO sqlalchemy.engine.base.Engine.0x..cL
COMMIT
>>> me.age=23
>>> ses.flush()
2007-08-04 00:56:05,610 INFO sqlalchemy.engine.base.Engine.0x..cL
BEGIN
2007-08-04 00:56:05,613 INFO sqlalchemy.engine.base.Engine.0x..cL
UPDATE users SET age=? WHERE users.id = ?
2007-08-04 00:56:05,614 INFO sqlalchemy.engine.base.Engine.0x..cL [23,
1]
2007-08-04 00:56:05,615 INFO sqlalchemy.engine.base.Engine.0x..cL
COMMIT
>>> me.age=23
>>> ses.flush()
2007-08-04 00:56:13,236 INFO sqlalchemy.engine.base.Engine.0x..cL
BEGIN
2007-08-04 00:56:13,238 INFO sqlalchemy.engine.base.Engine.0x..cL
COMMIT
>>> me.age=21
>>> ses.flush()
2007-08-04 00:56:17,959 INFO sqlalchemy.engine.base.Engine.0x..cL
BEGIN
2007-08-04 00:56:17,962 INFO sqlalchemy.engine.base.Engine.0x..cL
UPDATE users SET age=? WHERE users.id = ?
2007-08-04 00:56:17,962 INFO sqlalchemy.engine.base.Engine.0x..cL [21,
1]
2007-08-04 00:56:17,964 INFO sqlalchemy.engine.base.Engine.0x..cL
COMMIT
>>> me.age=21
>>> ses.flush()
2007-08-04 00:56:20,854 INFO sqlalchemy.engine.base.Engine.0x..cL
BEGIN
2007-08-04 00:56:20,856 INFO sqlalchemy.engine.base.Engine.0x..cL
COMMIT
>>> me.age=21
>>> me.lname='Dusek'
>>> me.age=21
>>> ses.flush()
2007-08-04 00:56:41,063 INFO sqlalchemy.engine.base.Engine.0x..cL
BEGIN
2007-08-04 00:56:41,066 INFO sqlalchemy.engine.base.Engine.0x..cL
UPDATE users SET lname=? WHERE users.id = ?
2007-08-04 00:56:41,066 INFO sqlalchemy.engine.base.Engine.0x..cL
['Dusek', 1]
2007-08-04 00:56:41,068 INFO sqlalchemy.engine.base.Engine.0x..cL
COMMIT


So - how is it with sqlalchemy and intelligence when writing to an
instance of orm-mapped class? Does sqlalchemy behave intelligent just
by coincidence in some cases (like this one) and in other not?

Thanks for your thoughts,
Boris


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