I just fixed the error. I didn't see it before. I initialize the userGroup attribute to new UseGroup instance in one of the migration functions.
Thanks! On Dec 2, 11:22 am, Michael Bayer <[email protected]> wrote: > On Dec 2, 2010, at 11:13 AM, Alvaro Reinoso wrote: > > > > > I think I see the error. Those are the whole tables: > > > class User(rdb.Model): > > """Represents the user""" > > rdb.metadata(metadata) > > rdb.tablename("users") > > > id = Column("id", Integer, primary_key=True) > > name = Column("name", String(50)) > > email = Column("email", String(50)) > > password = Column("password", String(50)) > > hashed = Column("hashed", Boolean) > > military = Column("military", Boolean) > > agreedLicense = Column("agreed_license", Boolean) > > userGroupId = Column("user_group_id", Integer, > > ForeignKey("user_groups.id")) > > > userGroup = relationship("UserGroup", uselist=False) > > channels = relationship("Channel", secondary=user_channels, > > order_by="Channel.titleView", backref="users") > > mediaGroups = relationship("MediaGroup", secondary=user_media_groups, > > order_by="MediaGroup.title", backref="users") > > screens = relationship("Screen", secondary=user_screens, > > backref="users") > > screenGroups = relationship("ScreenGroup", > > secondary=user_screen_groups, order_by="ScreenGroup.title", > > backref="users") > > > class UserGroup(rdb.Model): > > """Represents a group of users with the same features""" > > rdb.metadata(metadata) > > rdb.tablename("user_groups") > > > id = Column("id", Integer, primary_key=True) > > title = Column("title", String(50)) > > > users = relationship("User", order_by="User.name", cascade="all, > > delete", backref="user_groups") > > permissions = relationship("Permission", > > secondary=user_group_permissions, backref="user_groups") > > > I have pretty similar tables and relations, but the different with > > other tables is I have this relation: userGroupId = > > Column("user_group_id", Integer, ForeignKey("user_groups.id")). So it > > seems every time when a user is created, it creates a new row in the > > user_groups and that row is related to that user. I think it's because > > of that relation. > > > How could I avoid this? > > there's really not enough detail here to see, but the only way associating > two existing objects together creates a row is if "secondary" is used, here > if "user_groups" is mapped as a secondary somewhere, which I do not see. if > you've mapped to a table explicitly, you should not use that table as the > "secondary" argument elsewhere, or the relationship with "secondary" should > be set up as viewonly=True. > > > > > Thanks! > > > On Dec 1, 6:35 pm, Michael Bayer <[email protected]> wrote: > >> On Dec 1, 2010, at 5:46 PM, Alvaro Reinoso wrote: > > >>> Hello, > > >>> I have a system to manage users in my application, but I'm getting > >>> some troubles with it. > > >>> Every user has to belong to a group of users. One user can only be in > >>> one group. > > >>> I have those tables (inheriting from rdb.Model is basically the same > >>> thing than using sqlalchemy's declarative model) > > >>> class User(rdb.Model): > >>> """Represents the user""" > >>> rdb.metadata(metadata) > >>> rdb.tablename("users") > > >>> id = Column("id", Integer, primary_key=True) > >>> name = Column("name", String(50)) > >>> .... > > >>> userGroup = relationship("UserGroup", uselist=False) > >>> ..... > > >>> class UserGroup(rdb.Model): > >>> """Represents a group of users with the same features""" > >>> rdb.metadata(metadata) > >>> rdb.tablename("user_groups") > > >>> id = Column("id", Integer, primary_key=True) > >>> title = Column("title", String(50)) > > >>> users = relationship("User", order_by="User.name", cascade="all, > >>> delete, delete-orphan", backref="user_groups") > >>> .... > > >>> I have a script which migrate users from a pre-existing Zope DB > >>> (object-oriented): > > >>> def migrateUsers(): > >>> """Migrate all the users to the database""" > >>> session = rdb.Session() > >>> rScreens = session.query(Screen).all() > >>> rUserGroups = session.query(UserGroup).all() > >>> ..... > > >>> for oldUser in grok.getSite()['Users'].values(): > >>> user = User() > >>> ...... > >>> for newGroup in rUserGroups: > >>> if newGroup.title == "superadmins": > >>> newGroup.users.append(user) > >>> ...... > > >>> return > > >>> When I execute the script, the user_groups are properly created and > >>> the users are properly added to the user_groups they should belong to, > >>> but I get empty "group" entries in the database, and I don't know why > > >>> I have made some tests, and I've realized that I get an empty entry > >>> (an empty user_group) every time I try to add a user to a user_group, > >>> but I don't know what is causing this behavior. > > >> theres no instantiation of UserGroup indicated above so no indication of > >> what would be creating extra "group" rows in your database. > > >>> Any hint will be appreciated. > > >>> -- > >>> 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 > >>> athttp://groups.google.com/group/sqlalchemy?hl=en. > > > -- > > 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 > > athttp://groups.google.com/group/sqlalchemy?hl=en. -- 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.
