Hello,
I am having a problem here - at one point a one-to-many relation
attribute is not in sync with a backref one (http://dpaste.com/104225/):
# Fails with Python-2.5.4 and SQLAlchemy-0.5.5 or SQLAlchemy-rel_0_5 rev
6312
import sqlalchemy
import sqlalchemy.ext.declarative
class TefDeclarativeMeta(sqlalchemy.ext.declarative.DeclarativeMeta):
def __init__(cls, classname, bases, dict_):
if '_decl_class_registry' in cls.__dict__:
return type.__init__(cls, classname, bases, dict_)
# added here because we need the first argument to relation()
dict_['manager'] = sqlalchemy.orm.relation(
cls,
backref = 'subordinates',
primaryjoin = cls.managerId == cls.Id,
remote_side = cls.Id
)
sqlalchemy.ext.declarative._as_declarative(cls, classname,
dict_)
return type.__init__(cls, classname, bases, dict_)
Base =
sqlalchemy.ext.declarative.declarative_base(metaclass=TefDeclarativeMeta,
mapper=sqlalchemy.orm.mapper)
class Employee(Base):
__tablename__ = "employees"
Id = sqlalchemy.Column( sqlalchemy.types.Integer, primary_key=True,
autoincrement=True)
name = sqlalchemy.Column(sqlalchemy.types.String(128))
managerId = sqlalchemy.Column(sqlalchemy.types.Integer,
sqlalchemy.ForeignKey(Id))
def __repr__(self):
return self.name
SteveBallmer = Employee(name = 'Steve Ballmer')
CraigMundie = Employee(name = 'Craig Mundie')
BillGates = Employee(name = 'Bill Gates')
CraigMundie.manager = BillGates
SteveBallmer.subordinates = [CraigMundie]
print "CraigMundie.manager: %s" % (CraigMundie.manager)
# Why does CraigMundie appear here?
# after SteveBallmer.subordinates = [CraigMundie]
# CraigMundie.manager should be set to SteveBallmer so
# CraigMundie should not be present in BillGates.subordinates
print "BillGates.subordinates: %s" % (BillGates.subordinates)
print "SteveBallmer.subordinates: %s" % (SteveBallmer.subordinates)
Is this a SQLAlchemy bug or my mistake?
Regards,
Filip Zyzniewski
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
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
-~----------~----~----~----~------~----~------~--~---