Hi

I'm trying to merge objects across sessions and I'm seeing some odd
behavour with a one-one child relation:

"""
import sqlalchemy as sql
import sqlalchemy.orm as orm
from sqlalchemy.ext.declarative import declarative_base

engine = sql.create_engine('sqlite:///:memory:')
metadata = sql.MetaData(bind=engine)
DB = orm.sessionmaker(bind=engine, autoflush=False)

class _base(object):
    def __repr__(o):
        return "<%s 0x%x id=%r>" % (type(o).__name__, id(o), o.id)

base = declarative_base(metadata=metadata, cls=_base)


class Parent(base):
    __tablename__ = 'a'
    id = sql.Column(sql.Integer(), nullable=False, primary_key=True)
    child = orm.relation("Child1", uselist=False, cascade="all,delete-
orphan")
    children = orm.relation("Child2", uselist=True,
cascade="all,delete-orphan")


class Child1(base):
    __tablename__ = 'b'
    id = sql.Column(sql.Integer(), nullable=False, primary_key=True)
    p_id = sql.Column(sql.Integer(), sql.ForeignKey("a.id"))

class Child2(base):
    __tablename__ = 'c'
    id = sql.Column(sql.Integer(), nullable=False, primary_key=True)
    p_id = sql.Column(sql.Integer(), sql.ForeignKey("a.id"))

metadata.create_all()

db = DB()

c1 = Child1()
c2 = Child2()
p = Parent(id=1, child=c1, children=[c2])
db.add(p)
db.commit()
db.close()

db1 = DB()
p1 = db1.query(Parent).first()
print p1, p1.child, p1.children
print

p1.child = None
p1.children[:] = []
db1.close()

db2 = DB()
p2 = db2.merge(p1)
print p2, p2.child, p2.children
print
"""

I get this output:

<Parent 0x97a516c id=1> <Child1 0x979f26c id=1> [<Child2 0x97a530c
id=1>]

<Parent 0x97a576c id=1> <Child1 0x97a5d0c id=1> []


that is, when uselist=False, setting the attribute to None does not
persist across the merge.

Thanks,

a.

--

You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.


Reply via email to