On Dec 26, 2007 10:38 PM, Michael Bayer <[EMAIL PROTECTED]> wrote:
> if you have an instance which you are unsure if it already exists, you
> can add it to a session using session.save_or_update(instance).  The
> decision between INSERT and UPDATE is ultimately decided by the
> presence of an attribute on the instance called "_instance_key".

I'd like mapper to use UPDATE for newly constructed object (i.e.
object without _instance_key attribute) when a record with the same
primary key already exists in DB.

> In most cases, this attribute is not something you need to worry about;
> if an instance has been flushed or loaded from a session, it will have
> the attribute, or if you've just constructed it and not yet persisted
> it, the attribute will not be there.  If you think you need to
> manually manipulate this attribute, perhaps you can describe your
> specific use case so that we can recommend the best way to accomplish
> it.

OK, below is a use/test case:

--->8---
import sqlalchemy as sa, logging
from sqlalchemy.orm import mapper, sessionmaker

logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
logging.basicConfig()

class ModelObject(object):

    def __init__(self, id, title):
        self.id = id
        self.title = title

metadata = sa.MetaData()

objectTable = sa.Table(
    'Objects', metadata,
    sa.Column('id', sa.Integer, primary_key=True),
    sa.Column('title', sa.String(255), nullable=False),
)

objectsMapper = mapper(ModelObject, objectTable)

engine = sa.create_engine('sqlite://')
metadata.create_all(engine, checkfirst=True)

session = sessionmaker(bind=engine)()

obj = ModelObject(1, u'title')
session.save(obj)
session.commit()

session.clear()

# Another program. We have to insure that object with id=1 exists in DB and has
# certain properties.
obj = ModelObject(1, u'title')
session.save_or_update(obj)
session.commit()
--->8---

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