Thread: [SQLObject] Having a many to many relation as a Set - part II
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Helio MC P. <hel...@gm...> - 2006-01-09 21:28:16
|
Hi, First of all sorry post new email in the list but I have some errors in the other one. ( http://sourceforge.net/mailarchive/forum.php?thread_id=3D9136487&forum_id= =3D30269 ) The example that Rick Flosi gives me was correct and all works ^_^. Thank= s Rick :-) Have one more question :P Is there a way to raise something like "Duplicate Key"? It gives me an exception to big :P """pysqlite2.dbapi2.OperationalError: columns grupo_id, utilizador_id are not unique""" Many thanks for all, Helio Pereira <------------------------ Code -----------------------------------> from sqlobject import * import sys, os conn_str=3D"sqlite:/:memory:?debug=3Dt" #conn_str=3D"sqlite:/:memory:" sqlhub.processConnection =3D connectionForURI(conn_str) class GrupoUtilizador(SQLObject): class sqlmeta: table =3D 'grupo_utilizador' grupo =3D ForeignKey('Grupo', notNull=3DTrue) utilizador =3D ForeignKey('Utilizador', notNull=3DTrue) unique =3D index.DatabaseIndex(grupo, utilizador, unique=3DTrue) class Utilizador(SQLObject): nome =3D StringCol(alternateID=3DTrue, unique=3DTrue, length=3D100) grupos =3D RelatedJoin('Grupo', createRelatedTable=3DFalse) class Grupo(SQLObject): nome =3D StringCol(alternateID=3DTrue, length=3D15) descr =3D StringCol(length=3D100) utilizadores =3D RelatedJoin('Utilizador', createRelatedTable=3DFalse) GrupoUtilizador.createTable() Utilizador.createTable() Grupo.createTable() g1 =3D Grupo(nome=3D"grupo1", descr=3D"Grupo 1") g2 =3D Grupo(nome=3D"grupo2", descr=3D"Grupo 2") u1 =3D Utilizador(nome=3D"Helio") u2 =3D Utilizador(nome=3D"Pereira") u1.addGrupo(g1) u1.addGrupo(g2) # Here is a duplicate group in the user u2.addGrupo(g1) u2.addGrupo(g1) print "-"*80 print u2, u2.grupos print "-"*80 |
From: Oleg B. <ph...@ma...> - 2006-01-09 21:43:42
|
On Mon, Jan 09, 2006 at 09:28:10PM +0000, Helio MC Pereira wrote: > Have one more question :P Is there a way to raise something like > "Duplicate Key"? It gives me an exception to big :P There is no currently. > """pysqlite2.dbapi2.OperationalError: columns grupo_id, utilizador_id are > not unique""" IWBN if someone develops a hierarchy of SQL-related exceptions, and people start collecting information on how to map DB API driver's exceptions to SQLObject's exceptions. But that's a big job... Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Ian B. <ia...@co...> - 2006-01-10 17:35:40
|
Oleg Broytmann wrote: > On Mon, Jan 09, 2006 at 09:28:10PM +0000, Helio MC Pereira wrote: > >> Have one more question :P Is there a way to raise something like >>"Duplicate Key"? It gives me an exception to big :P > > > There is no currently. > > >>"""pysqlite2.dbapi2.OperationalError: columns grupo_id, utilizador_id are >>not unique""" > > > IWBN if someone develops a hierarchy of SQL-related exceptions, and > people start collecting information on how to map DB API driver's > exceptions to SQLObject's exceptions. > But that's a big job... Yeah, those exceptions are rather fuzzy -- DB-API defines some exceptions and general meanings, but what actual database drivers raise varies widely. Also, a simpler feature for SQLObject would be a fixing up of the hierarchy, so that all OperationalErrors subclassed sqlobject.OperationalError (ditto for the rest of the exceptions). You can do this like: import pysqlite.dbapi2 as dbapi dbapi.OperationalError.__bases__ = dbapi.OperationalError.__bases__ + (sqlobject.OperationalError, ) -- Ian Bicking / ia...@co... / http://blog.ianbicking.org |