I tried this....

class UserGroup(DomainObject):
   pass
assign_mapper(context, UserGroup, tbl['acl'],
   properties = {
'id_operatore': tbl['acl'].c.id_operatore, 'user_id' : synonym('id_operatore', proxy=True),
                'cod_ruolo'   : tbl['acl'].c.cod_ruolo,    'group_id': 
synonym('cod_ruolo',    proxy=True)

                }
)
but...
 File "build/bdist.linux-i686/egg/sqlalchemy/orm/mapper.py", line 552, in init
 File "build/bdist.linux-i686/egg/sqlalchemy/ext/assignmapper.py", line 23, in 
__init__
 File "build/bdist.linux-i686/egg/sqlalchemy/orm/properties.py", line 38, in 
__set__
AttributeError: 'SynonymProperty' object has no attribute 'set'


Michael Bayer wrote:


in both of these cases, a particular Column can only be expressed on the Mapper once. I should add some error checking to Mapper to insure that this is followed. The reason is simple: if a class has two attributes "a" and "b" which both point to a column "C", and I set "a" to "5" and "b" to "7" and then flush(), which attribute do I persist ?

therefore, a quick way to make a synonym for these attributes is to use "synonym" with proxy=True which will automatically set up the attribute on the class:

mapper(Class, table, properties={
    'id':table.c.id,
        'name':synonym('id', proxy=True)
})

where both "id" and "name" utlimately point to just the "id" information on the class.


On Jan 19, 2007, at 9:48 AM, Jose Soares wrote:


I think I have a similar trouble, although the symptoms are different.
I have a PostgreSQL table named 'acl' mapped as UserGroup.

Table acl
   Column    |  Type  --------------+---------
id           | integer
id_operatore | integer
cod_ruolo    | text   id_asl       | integer
id_azienda   | integer


I overriding some columns as: (take a look specially to group_id = cod_ruolo):

class UserGroup(DomainObject):
   pass
assign_mapper(context, UserGroup, tbl['acl'],
   properties = {  'user_id'     : tbl['acl'].c.id_operatore,
                   'id_operatore': tbl['acl'].c.id_operatore,
                   'group_id'    : tbl['acl'].c.cod_ruolo,
                   'cod_ruolo'   : tbl['acl'].c.cod_ruolo})

I have this problem, triyng to insert data...
the first line works but the second one, doesn't inser any data into column cod_ruolo.

1. id_operatore = item.get('id_operatore'), group_id = item.get ('cod_ruolo')) 2. id_operatore = item.get('id_operatore'), cod_ruolo = item.get ('cod_ruolo'))

Any ideas?
jo

Marco Mariani ha scritto:

Hi there

This relates to Turbogears, but is really a SA question.

I've customized TG authentication & authorization to use my autloaded
tables in Postgres and SqlAlchemy 0.3.3.

In my schema, I have User.c.uid, the login name of the users, as a
primary key

TG uses a User mapper with two distinct columns: User.c.user_id (the
primary key) and User.c.user_name (the logname).

Since I am an avid fan of meaningful primary keys (and have a legacy db to support) I want to keep things my way, but TG does some user handling
that I have to fix.

So, to avoid patches to the TG source or useless sub-classing, I'd like
to access the same column by any of the three names.

I cannot do that with a python property on the mapper because TG should
be able to use get_by and friends.


I've come up with:


assign_mapper(context, User, tbl['users'], properties = {
    'user_id': tbl['users'].c.uid,   # alias for SqlAlchemyIdentity
    'user_name': tbl['users'].c.uid,   # alias for SqlAlchemyIdentity
    'uid': tbl['users'].c.uid,
    })



This seems to work (I added the third property to make 'uid' reappear!)
, but makes it impossible, for instance, to create new users:

In [1]: user = User(uid='xxx')

In [2]: session.flush()
[...]
SQLError: (IntegrityError) null value in column "uid" violates not- null
constraint
 'INSERT INTO users (uid, nome, cognome, codice_fiscale) VALUES
(%(uid)s, %(name)s, %(surname)s)' {'surname': None, 'uid': None, 'name':
None}

In [3]: user = User(user_id='xxx')

In [4]: session.flush()
[...]
SQLError: (IntegrityError) null value in column "uid" violates not- null
constraint
 'INSERT INTO users (uid, nome, cognome, codice_fiscale) VALUES
(%(uid)s, %(name)s, %(surname)s)' {'surname': None, 'uid': None, 'name':
None}



I reckon I should probably go ahead and patch TG, but maybe there  is a
clean way to do what I have in mind?

Thank you.




>



>


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
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