I have a PostgreSQL database with 3 tables: Object, Role and User:
CREATE TABLE "Object"
(
"ObjectID" BIGINT NOT NULL DEFAULT NEXTVAL('"SEQ_ObjectID"'),
"ObjectTypeID" INT NOT NULL,
"OwnerUserID" BIGINT NOT NULL,
"CreatedTimestamp" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT
NOW(),
"LastModifiedUserID" BIGINT DEFAULT NULL,
CONSTRAINT "PK_Object" PRIMARY KEY ("ObjectID"),
CONSTRAINT "FK_Object_ObjectType" FOREIGN KEY ("ObjectTypeID")
REFERENCES "ObjectType"("ObjectTypeID")
);
CREATE TABLE "Role"
(
"RoleID" BIGINT NOT NULL DEFAULT NEXTVAL('"SEQ_ObjectID"'),
CONSTRAINT "PK_Role" PRIMARY KEY ("RoleID"),
CONSTRAINT "FK_Role_Object" FOREIGN KEY ("RoleID") REFERENCES
"Object"("ObjectID")
ON DELETE CASCADE
);
CREATE TABLE "User"
(
"UserID" BIGINT NOT NULL DEFAULT NEXTVAL('"SEQ_ObjectID"'),
CONSTRAINT "PK_User" PRIMARY KEY ("UserID"),
CONSTRAINT "FK_User_Role" FOREIGN KEY ("UserID") REFERENCES
"Role"("RoleID")
ON DELETE RESTRICT
);
ALTER TABLE "Object"
ADD CONSTRAINT "FK_Object_owner" FOREIGN KEY ("OwnerUserID")
REFERENCES "User"("UserID")
ON DELETE RESTRICT;
ALTER TABLE "Object"
ADD CONSTRAINT "FK_Object_last_modified" FOREIGN KEY
("LastModifiedUserID") REFERENCES "User"("UserID")
ON DELETE RESTRICT;
Then I reflect the tables:
object_table = sa.Table('Object', SA_Metadata, autoload = True,
autoload_with=engine)
role_table = sa.Table('Role', SA_Metadata, autoload = True,
autoload_with=engine)
user_table = sa.Table('User', SA_Metadata, autoload = True,
autoload_with=engine)
And map them:
orm.mapper(db.Object, object_table,
polymorphic_on=object_table.c.ObjectTypeID, polymorphic_identity=1)
orm.mapper(db.Role, role_table, inherits=db.Object,
polymorphic_identity=2)
orm.mapper(db.User, user_table, inherits=db.Role,
polymorphic_identity=3)
And when I try to insert a new User:
user = db.User()
user.OwnerUserID = 1
db_session.save(user)
db_session.flush()
I get this error:
sqlalchemy.exceptions.CircularDependencyError: Circular dependency
detected [(Role, User), (Object, Role), (User, Object)][]
The tables are circular, but the UserID and OwnerUserID are never
identical for any User that SQLAlchemy should insert. I spent this
whole day looking for a solution, but there were none.
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---