SQLObject

marcelo schiavone marcelo.schiavone en gmail.com
Lun Jul 3 14:16:15 CEST 2006


Hola, muchas gracias por la respuesta. Lo solucione de esa forma, ya
que la otra solucion que intente no funciono. Habia intentado con
metodos _get_ y _set_ del campo id.

Saludos


On 7/2/06, Iñigo Serna <inigoserna en gmail.com> wrote:
> [buenas, lo envío ahora desde la dirección de email con la que estoy
> suscrito ;-]
>
> Buenas,
>
> perdón si llego tarde al mensaje...
>
> El "id" en SQLObject es un campo "interno" y *siempre*
> autoincremental, da lo mismo que le cambies de nombre con el truco del
> "sqlmeta".
> Entiendo que lo que tú necesitas es que el campo "dni" sea una clave,
> pero no primaria, para ello créalo como si fuera cualquier otro campo
> normal y añádele lo de AlternateID=True.
>
> De la documentación:
> """
> If you use alternateID=True, this means that the column uniquely
> identifies rows -- like a username uniquely identifies a user. This
> identifier is in addition to the primary key (id), which is always
> present.
>
> Note
>
> SQLObject has a strong requirement that the primary key be unique and
> immutable. You cannot change the primary key through SQLObject, and if
> you change it through another mechanism you can cause inconsistency in
> any running SQLObject program (and in your data). For this reason
> meaningless integer IDs are encouraged -- something like a username
> that could change in the future may uniquely identify a row, but it
> may be changed in the future. So long as it is not used to reference
> the row, it is also safe to change it in the future. """
>
> Yo definiría la clase como:
>
> class usuario(SQLObject):
>      dni = StringCol(alternateID=True, length=9)
>     nombre = StringCol()
>     rol = ForeignKey('rol')
>
> NOTA: length = 9 ó 8 dependiende si el campo dni incluye la letra del NIF o no.
>
> Esto hace que "dni" sea clave no primaria, no autoincrementa, facilita
> búsquedas, obliga a que no sea nulo, etc.
> Es decir, que se puede hacer cosas como:
> >>> u1 = Usuario.byDni('12345678A')
>
> y, por cierto, que el error que se menciona en u email anterior es tal
> vez porque se define dni como StringCol y luego se le pasa un int en
> vez de un string.
>
> Espero que hay sido de ayuda.
>
> Un saludo,
> Iñigo Serna
>
> PD: por cierto, que es mi primer mensaje a la lista
>
> El mar, 27-06-2006 a las 19:59 -0400, Luis Miguel Morillas escribió:
> 2006/6/27, marcelo schiavone <marcelo.schiavone en gmail.com>:
> > > Gracias Luis, pero probe esto que me has dicho y genera un campo "dni"
> > > y otro "id", el cual es la clave primaria auto-incremental. Mi idea es
> > > que "dni" sea la clave primaria y que no sea auto-incremental.
> > >
> >
> > Tienes razon. Acabo de leerlo en la documentacion:
> > If you use alternateID=True, this means that the column uniquely
> > identifies rows -- like a username uniquely identifies a user. This
> > identifier is in addition to the primary key (id), which is always
> > present.
> >
> > Y si combinas las dos: alternateID y idName ?
> >
> > > Saludos
> > >
> > >
> > > On 6/27/06, Luis Miguel Morillas <morillas en gmail.com> wrote:
> > > > 2006/6/27, marcelo schiavone <marcelo.schiavone en gmail.com>:
> > > > > Hola, alguien sabe como hacer para que el idName no sea auto-incremental.
> > > > > Ejemplo:
> > > > > class usuario(SQLObject):
> > > > >         class sqlmeta:
> > > > >                 idName="dni"
> > > > >         nombre=StringCol()
> > > > >         rol=ForeignKey('rol')
> > > >
> > > > class usuario(SQLObject):
> > > >     dni = StringCol(alternateID=True)
> > > >     nombre = StringCol()
> > > >     rol = ForeignKey('rol')
> > > >
> > > >
> > > >
> > > > >
> > > > > para agregar un usuario tengo que hacer:
> > > > > usuario(nombre="nombre usuario", rol=None)
> > > > >
> > > > > porque si quiero poner el DNI de esta manera:
> > > > > usuario(dni=32894, nombre="nombre usuario", rol=None)
> > > > > larga el siguiente error:
> > > > > usuario.set() got an unexpected keyword argument dni
> > > > >
> > > > > Saludos
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo/python-es
>




Más información sobre la lista de distribución Python-es