I'll give it a try!!

Thank you!

2011/2/18 Michael Bayer <[email protected]>:
>
> On Feb 17, 2011, at 6:37 PM, Hector Blanco wrote:
>
>> Hello everyone!
>>
>> Let's say I have a class defined like this:
>>
>> class User(declarativeBase):
>>       """Represents a user"""
>>       __tablename__ = "users"
>>
>>       _id = Column("id", Integer, primary_key=True)
>>       _phone = Column("phone", String(16))
>>       _userName = Column("user_name", String(50), unique=True, 
>> nullable=False)
>>       _password = Column("password", String(64), nullable=False)
>>
>>       _userGroupId = Column("user_group_id", Integer, 
>> ForeignKey("user_groups.id"))
>>       _userGroup = relationship("UserGroup", uselist=False)
>>
>>       def setId(self, id):
>>               """Set id"""
>>               self._id = int(id)
>>
>>       def getId(self):
>>               """Get id"""
>>               return self._id
>>
>>       def setUserGroupById(self, userGroupId):
>>               userGroupId = int(userGroupId)
>>               if userGroupId != self.userGroupId:
>>                       self.userGroup = UserGroupManager.getById(userGroupId)
>>
>>       def setUserGroup(self, userGroup):
>>               """Set user group"""
>>               if isinstance(userGroup, UserGroup):
>>                       self._userGroup = userGroup
>>               else:
>>                       raise TypeError("Trying to set a " + 
>> str(type(userGroup)) + " as user group")
>>
>>       def getUserGroup(self):
>>               """Get user"""
>>               return self._userGroup
>>
>>       #More getters/setters
>>
>>       id = sqlalchemy.orm.synonym('_id', descriptor=property(getId, setId))
>>       phone = sqlalchemy.orm.synonym('_phone',
>> descriptor=property(getPhone, setPhone))
>>       userName = sqlalchemy.orm.synonym('_userName',
>> descriptor=property(getUserName, setUserName))
>>       password = sqlalchemy.orm.synonym('_password',
>> descriptor=property(getPassword, setPassword))
>>       userGroupId = sqlalchemy.orm.synonym('_userGroupId',
>> descriptor=property(getUserGroup, setUserGroup))
>>       userGroup = sqlalchemy.orm.synonym('_userGroup',
>> descriptor=property(getUserGroup, setUserGroup))
>>
>> I have created an utility that, given an instance gives me the names
>> of the synonyms in said instance.
>>
>> def getProperties(instance):
>>       properties = list()
>>       mapper = sqlalchemy.orm.object_mapper(instance)
>>       for prop in mapper.iterate_properties:
>>               if isinstance(prop, sqlalchemy.orm.properties.SynonymProperty):
>>                       properties.append(prop.key)
>>       return properties
>>
>> That would give me ["id", "phone", "userName", "password",
>> "userGroupId", "userGroup"], so I can more or less generically go
>> through all said values and execute things like
>>
>> for attribute in getProperties(instanceOfUser):
>>     value = getattr(instanceOfUser, attribute)
>>
>> Is there any way of knowing that said "value"s are ForeignKeys or
>> relationships? For instance, I'd like to know that the attribute "id"
>> is a regular (well... kind of regular... it's a Primary key, but it's
>> not going to point to anything in another table) numeric attribute,
>> but "userGroupId" is a foreign key and "userGroup" is a Relationship.
>> I've been sneaking in the vars, __dict__, dir of the values returned
>> by getattr, but I haven't been able to find anything suitable.
>
>
> you just have to poke around and use isinstance() on the MapperProperty 
> objects, and/or check for known attributes.    The choices are 
> ColumnProperty, RelationshipProperty, SynonymProperty, etc.
>
> synonyms are also superceded in 0.7.  they're not very useful compared to 
> hybrids.
>
>
>
>
> --
> 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.
>
>

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

Reply via email to