From: marcelo s. <mar...@gm...> - 2006-10-25 21:29:34
|
Hi I have the following file: from sqlobject import * connection_string = 'mysql://dev@localhost/bd' connection = connectionForURI(connection_string) class centro(SQLObject): _connection=connection descripCentro=StringCol() practica=RelatedJoin('practica') class practica(SQLObject): _connection=connection descripPractica=StringCol() valorTotalPractica=FloatCol() centro=RelatedJoin('centro') SQLObject generates the table "centro_practica". Since I do to add for example a FIELD "estate" to the table "centro_practica"? Regards |
From: Luis J. P. <jav...@gm...> - 2008-05-16 23:59:05
|
'm working with SQLObject and I'm getting frustated because of lack of examples. First of all, I'm having problems creating tables with many-many relationships by means of RelatedJoin. I want to create and know how work the CRUD operations in the tables created by RelatedJoin operation. I have two tables I've created as follow: class Term(SQLObject): name = StringCol(default=None) description = StringCol(default=None) vocabulary = ForeignKey('Vocabulary') term_questions = RelatedJoin('Question', joinColumn='question', otherColumn='term', intermediateTable='Term_questions') Term.createTable(ifNotExists=True) class Question(SQLObject): question_file = StringCol(default=None, length=255, unique=True) question_name = StringCol(default=None) question_type = StringCol(default=None) term_questions = RelatedJoin('Term', joinColumn='term', otherColumn='question', intermediateTable='Term_questions') Question.createTable(ifNotExists=True) So, I have a new table with two columns (term and question). How CRUD operations work? I've tried to create a new instance of Term_questions table: Term_questions(term=term.id, question=q.id), but the module Term_questions doesn't exist or if I try: q = Question(question_file="file", question_name= "name", question_type="MultipleChoice") term.term_questions = q.id I get: AttributeError: can't set attribute Can anybody help me? Thanks in advance. |
From: Luke O. <lo...@gm...> - 2008-05-17 05:10:11
|
First off, let me say I feel RelatedJoin and MultipleJoin should be deprecated to be renamed RawRelatedJoin/RawMultipleJoin, there are two better alternatives available since at least 0.8: * SQLRelatedJoin and SQLMultipleJoin * ManyToMany and OneToMany Yes, the docs need a massive overhaul on this topic - I don't believe ManyToMany and OneToMany are mentioned at all. These both have the advantage over the Raw versions of returning SelectResults instances: lazy, filterable etc result sets same as is returned by .select() They differ in how you perform the C*UD operations you're asking about, in short ManyToMany has .add(obj), .remove(obj), .create(kw) methods under obj.joinName, whereas SQLRelatedJoin adds methods to the class: .addJoinName(obj) and .removeJoinName(obj). If you choose to keep using RelatedJoin, it acts like SQLRelatedJoin in this aspect. I've put a doctest example of these and a little more up at http://freehg.org/u/loppear/sqlobject_play/file/5cf57a8ce206/m2m_versus_sqljoin.py - Luke |
From: Luis J. P. <jav...@gm...> - 2008-05-17 17:22:00
|
Thanks for the example. 2008/5/17 Luke Opperman <lo...@gm...>: > > First off, let me say I feel RelatedJoin and MultipleJoin should be > deprecated > to be renamed RawRelatedJoin/RawMultipleJoin, there are two better > alternatives > available since at least 0.8: > * SQLRelatedJoin and SQLMultipleJoin > * ManyToMany and OneToMany > > > Yes, the docs need a massive overhaul on this topic - I don't believe > ManyToMany > and OneToMany are mentioned at all. > > These both have the advantage over the Raw versions of returning > SelectResults > instances: lazy, filterable etc result sets same as is returned by > .select() > > They differ in how you perform the C*UD operations you're asking about, in > short > ManyToMany has .add(obj), .remove(obj), .create(kw) methods under > obj.joinName, > whereas SQLRelatedJoin adds methods to the class: .addJoinName(obj) and > .removeJoinName(obj). If you choose to keep using RelatedJoin, it acts like > SQLRelatedJoin in this aspect. > > I've put a doctest example of these and a little more up at > > http://freehg.org/u/loppear/sqlobject_play/file/5cf57a8ce206/m2m_versus_sqljoin.py > > - Luke > > > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > sqlobject-discuss mailing list > sql...@li... > https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss > |
From: Oleg B. <ph...@ph...> - 2008-05-17 15:42:49
|
On Sat, May 17, 2008 at 01:59:03AM +0200, Luis Javier Peris wrote: > 'm working with SQLObject and I'm getting frustated because of lack of > examples. First of all, I'm having problems creating tables with > many-many relationships > by means of RelatedJoin. I want to create and know how work the CRUD > operations in the tables created by RelatedJoin operation. I have two tables > I've created as follow: > > class Term(SQLObject): > name = StringCol(default=None) > description = StringCol(default=None) > vocabulary = ForeignKey('Vocabulary') > term_questions = RelatedJoin('Question', joinColumn='question', > otherColumn='term', > intermediateTable='Term_questions') > Term.createTable(ifNotExists=True) > > class Question(SQLObject): > question_file = StringCol(default=None, length=255, unique=True) > question_name = StringCol(default=None) > question_type = StringCol(default=None) > term_questions = RelatedJoin('Term', joinColumn='term', > otherColumn='question', > intermediateTable='Term_questions') > Question.createTable(ifNotExists=True) > > So, I have a new table with two columns (term and question). How CRUD > operations work? > > I've tried to create a new instance of Term_questions table: > Term_questions(term=term.id, question=q.id), but the module Term_questions > doesn't exist It doesn't exist. If you want to explicitly declare it: http://sqlobject.org/FAQ.html#how-can-i-define-my-own-intermediate-table-in-my-many-to-many-relationship > or if I try: > q = Question(question_file="file", question_name= "name", > question_type="MultipleChoice") > term.term_questions = q.id > I get: AttributeError: can't set attribute term.term_questions is a list. If want to add an object to the join, use add*() methods: term.addQuestion(q) or q.addTerm(term) Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Luis J. P. <jav...@gm...> - 2008-05-17 17:25:21
|
Thanks for the accurate answer, it have a lot of sense to have an add method but I didn't know that it existed. 2008/5/17 Oleg Broytmann <ph...@ph...>: > On Sat, May 17, 2008 at 01:59:03AM +0200, Luis Javier Peris wrote: > > 'm working with SQLObject and I'm getting frustated because of lack of > > examples. First of all, I'm having problems creating tables with > > many-many relationships > > by means of RelatedJoin. I want to create and know how work the CRUD > > operations in the tables created by RelatedJoin operation. I have two > tables > > I've created as follow: > > > > class Term(SQLObject): > > name = StringCol(default=None) > > description = StringCol(default=None) > > vocabulary = ForeignKey('Vocabulary') > > term_questions = RelatedJoin('Question', joinColumn='question', > > otherColumn='term', > > intermediateTable='Term_questions') > > Term.createTable(ifNotExists=True) > > > > class Question(SQLObject): > > question_file = StringCol(default=None, length=255, unique=True) > > question_name = StringCol(default=None) > > question_type = StringCol(default=None) > > term_questions = RelatedJoin('Term', joinColumn='term', > > otherColumn='question', > > intermediateTable='Term_questions') > > Question.createTable(ifNotExists=True) > > > > So, I have a new table with two columns (term and question). How CRUD > > operations work? > > > > I've tried to create a new instance of Term_questions table: > > Term_questions(term=term.id, question=q.id), but the module > Term_questions > > doesn't exist > > It doesn't exist. If you want to explicitly declare it: > > http://sqlobject.org/FAQ.html#how-can-i-define-my-own-intermediate-table-in-my-many-to-many-relationship > > > or if I try: > > q = Question(question_file="file", question_name= "name", > > question_type="MultipleChoice") > > term.term_questions = q.id > > I get: AttributeError: can't set attribute > > term.term_questions is a list. If want to add an object to the join, use > add*() methods: > > term.addQuestion(q) > > or > > q.addTerm(term) > > Oleg. > -- > Oleg Broytmann http://phd.pp.ru/ ph...@ph... > Programmers don't die, they just GOSUB without RETURN. > > ------------------------------------------------------------------------- > This SF.net email is sponsored by: Microsoft > Defy all challenges. Microsoft(R) Visual Studio 2008. > http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ > _______________________________________________ > sqlobject-discuss mailing list > sql...@li... > https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss > |
From: Oleg B. <ph...@ph...> - 2008-05-17 18:44:37
|
On Sat, May 17, 2008 at 07:24:57PM +0200, Luis Javier Peris wrote: > Thanks for the accurate answer, it have a lot of sense to have an add method > but I didn't know that it existed. > > 2008/5/17 Oleg Broytmann <ph...@ph...>: > > term.addQuestion(q) > > > > or > > > > q.addTerm(term) They are added automatically, and the names depend on the names of the classes. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Rick F. <rf...@im...> - 2006-10-25 21:49:04
|
Add 'createRelatedTable=False' to your RelatedJoins like: practica=RelatedJoin('practica', createRelatedTable=False) This might only be in 'SQLRelatedJoin' so you might have to use that over 'RelatedJoin'. 'SQLRelatedJoin' has some other advantages so you probably want to use that anyways. I'm not sure if 'createRelatedTable' is right, but it's something like that. I can look it up if that's wrong. Then create an SQLObject class for the centro_practica table: Fill in the ForeignKey() and additional SomeCol(). class centroPractica(SQLObject): centro=ForeignKey() practica=ForeignKey() estate=SomeCol() -- Rick On Wed, 25 Oct 2006, marcelo schiavone wrote: > Hi > > I have the following file: > > from sqlobject import * > connection_string = 'mysql://dev@localhost/bd' > connection = connectionForURI(connection_string) > > class centro(SQLObject): > _connection=connection > descripCentro=StringCol() > practica=RelatedJoin('practica') > > class practica(SQLObject): > _connection=connection > descripPractica=StringCol() > valorTotalPractica=FloatCol() > centro=RelatedJoin('centro') > > > SQLObject generates the table "centro_practica". > > Since I do to add for example a FIELD "estate" to the table "centro_practica"? > > Regards > > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > sqlobject-discuss mailing list > sql...@li... > https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss > |
From: marcelo s. <mar...@gm...> - 2006-10-26 14:15:47
|
Thank you Rick. The 'createRelatedTable' did not work but I am looking for it. That advantages has the SQLRelatedJoin? Regards On 10/25/06, Rick Flosi <rf...@im...> wrote: > > Add 'createRelatedTable=False' to your RelatedJoins like: > practica=RelatedJoin('practica', createRelatedTable=False) > This might only be in 'SQLRelatedJoin' so you might have to use that over > 'RelatedJoin'. 'SQLRelatedJoin' has some other advantages so you probably > want to use that anyways. > > I'm not sure if 'createRelatedTable' is right, but it's something like > that. I can look it up if that's wrong. > > Then create an SQLObject class for the centro_practica table: > Fill in the ForeignKey() and additional SomeCol(). > class centroPractica(SQLObject): > centro=ForeignKey() > practica=ForeignKey() > estate=SomeCol() > > -- > Rick > > On Wed, 25 Oct 2006, marcelo schiavone wrote: > > > Hi > > > > I have the following file: > > > > from sqlobject import * > > connection_string = 'mysql://dev@localhost/bd' > > connection = connectionForURI(connection_string) > > > > class centro(SQLObject): > > _connection=connection > > descripCentro=StringCol() > > practica=RelatedJoin('practica') > > > > class practica(SQLObject): > > _connection=connection > > descripPractica=StringCol() > > valorTotalPractica=FloatCol() > > centro=RelatedJoin('centro') > > > > > > SQLObject generates the table "centro_practica". > > > > Since I do to add for example a FIELD "estate" to the table "centro_practica"? > > > > Regards > > > > ------------------------------------------------------------------------- > > Using Tomcat but need to do more? Need to support web services, security? > > Get stuff done quickly with pre-integrated technology to make your job easier > > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > > _______________________________________________ > > sqlobject-discuss mailing list > > sql...@li... > > https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss > > > |
From: marcelo s. <mar...@gm...> - 2006-10-26 20:46:45
|
Hola Rick I did what you said to me. Thank you all good worked. I worked with PostgreSQL 8.0.3 and MySQL 5.0. In PostgreSQL it worked correctly. In MySQL on having entered: " PracticaCentro.createTable () " It showed the following error: " ProgrammingError: (1064, " You have an mistake in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to uses near ' unique (practica_id, centro_id) ' at line 1 ") " But equal it created the table "centro_practica" Thank you Regards On 10/26/06, Rick Flosi <rf...@im...> wrote: > Marcelo, > > This should work for you: > > -- > from sqlobject import * > connection_string = 'mysql://dev@localhost/bd' > connection = connectionForURI(connection_string) > > class Centro(SQLObject): > _connection = connection > descripCentro = StringCol() > practicas = SQLRelatedJoin('Practica', createRelatedTable=False) > > class Practica(SQLObject): > _connection = connection > descripPractica = StringCol() > valorTotalPractica = FloatCol() > centros = SQLRelatedJoin('Centro', createRelatedTable=False) > > class PracticaCentro(SQLObject): > _connection = connection > class sqlmeta: > table = 'centro_practica' > practica = ForeignKey('Practica', notNull=True, cascade=True) > centro = ForeignKey('Centro', notNull=True, cascade=True) > estate = StringCol() > unique = index.DatabaseIndex(practica, centro, unique=True) > == > > > SQLRelatedJoins have a filter() method that comes in handy. > filter() example: > > -- > ## Get a Practica record from the database > myPractica = Practica.get(1) > > ## Get the related Centros > myCentros = myPractica.centros > > ## Get a filtered list of the related Centros > ## Where descripCentro = 'Blah' > myCentrosFiltered = myPractica.centros.filter( > AND(Centro.q.descripCentro == 'Blah')) > == > > Hope this helps. > > -- > Rick > |
From: Rick F. <rf...@im...> - 2006-10-26 21:13:52
|
Ah, I should have mentioned that I use Postgres 7.x with this. I haven't used MySQL with this before. Were you able to resolve this? What was different? -- Rick On Thu, 26 Oct 2006, marcelo schiavone wrote: > Hola Rick > I did what you said to me. > Thank you all good worked. > > I worked with PostgreSQL 8.0.3 and MySQL 5.0. > In PostgreSQL it worked correctly. > In MySQL on having entered: > > " PracticaCentro.createTable () " > > It showed the following error: > > " ProgrammingError: (1064, " You have an mistake in your SQL syntax; > check the manual that corresponds to your MySQL server version for the > right syntax to uses near ' unique (practica_id, centro_id) ' at line > 1 ") " > > But equal it created the table "centro_practica" > > > Thank you > Regards > > On 10/26/06, Rick Flosi <rf...@im...> wrote: >> Marcelo, >> >> This should work for you: >> >> -- >> from sqlobject import * >> connection_string = 'mysql://dev@localhost/bd' >> connection = connectionForURI(connection_string) >> >> class Centro(SQLObject): >> _connection = connection >> descripCentro = StringCol() >> practicas = SQLRelatedJoin('Practica', createRelatedTable=False) >> >> class Practica(SQLObject): >> _connection = connection >> descripPractica = StringCol() >> valorTotalPractica = FloatCol() >> centros = SQLRelatedJoin('Centro', createRelatedTable=False) >> >> class PracticaCentro(SQLObject): >> _connection = connection >> class sqlmeta: >> table = 'centro_practica' >> practica = ForeignKey('Practica', notNull=True, cascade=True) >> centro = ForeignKey('Centro', notNull=True, cascade=True) >> estate = StringCol() >> unique = index.DatabaseIndex(practica, centro, unique=True) >> == >> >> >> SQLRelatedJoins have a filter() method that comes in handy. >> filter() example: >> >> -- >> ## Get a Practica record from the database >> myPractica = Practica.get(1) >> >> ## Get the related Centros >> myCentros = myPractica.centros >> >> ## Get a filtered list of the related Centros >> ## Where descripCentro = 'Blah' >> myCentrosFiltered = myPractica.centros.filter( >> AND(Centro.q.descripCentro == 'Blah')) >> == >> >> Hope this helps. >> >> -- >> Rick >> > > ------------------------------------------------------------------------- > Using Tomcat but need to do more? Need to support web services, security? > Get stuff done quickly with pre-integrated technology to make your job easier > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > _______________________________________________ > sqlobject-discuss mailing list > sql...@li... > https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss > |
From: marcelo s. <mar...@gm...> - 2006-10-27 12:43:26
|
I before could not solve this problem. Directly I was defining: class centro(SQLObject): _connection=connection descripCentro=StringCol() practicas = RelatedJoin('practica') class practica(SQLObject): _connection=connection descripPractica=StringCol() valorTotalPractica=FloatCol() centros = RelatedJoin('centro') centro.createTable () practica.createTable () The previous definition implies that SQLObject generates a table centro_practica Before I could not add another FIELD to the table centro_practica. Thank you Regards On 10/26/06, Rick Flosi <rf...@im...> wrote: > Ah, I should have mentioned that I use Postgres 7.x with this. > I haven't used MySQL with this before. > Were you able to resolve this? What was different? > > -- > Rick > > On Thu, 26 Oct 2006, marcelo schiavone wrote: > > > Hola Rick > > I did what you said to me. > > Thank you all good worked. > > > > I worked with PostgreSQL 8.0.3 and MySQL 5.0. > > In PostgreSQL it worked correctly. > > In MySQL on having entered: > > > > " PracticaCentro.createTable () " > > > > It showed the following error: > > > > " ProgrammingError: (1064, " You have an mistake in your SQL syntax; > > check the manual that corresponds to your MySQL server version for the > > right syntax to uses near ' unique (practica_id, centro_id) ' at line > > 1 ") " > > > > But equal it created the table "centro_practica" > > > > > > Thank you > > Regards > > > > On 10/26/06, Rick Flosi <rf...@im...> wrote: > >> Marcelo, > >> > >> This should work for you: > >> > >> -- > >> from sqlobject import * > >> connection_string = 'mysql://dev@localhost/bd' > >> connection = connectionForURI(connection_string) > >> > >> class Centro(SQLObject): > >> _connection = connection > >> descripCentro = StringCol() > >> practicas = SQLRelatedJoin('Practica', createRelatedTable=False) > >> > >> class Practica(SQLObject): > >> _connection = connection > >> descripPractica = StringCol() > >> valorTotalPractica = FloatCol() > >> centros = SQLRelatedJoin('Centro', createRelatedTable=False) > >> > >> class PracticaCentro(SQLObject): > >> _connection = connection > >> class sqlmeta: > >> table = 'centro_practica' > >> practica = ForeignKey('Practica', notNull=True, cascade=True) > >> centro = ForeignKey('Centro', notNull=True, cascade=True) > >> estate = StringCol() > >> unique = index.DatabaseIndex(practica, centro, unique=True) > >> == > >> > >> > >> SQLRelatedJoins have a filter() method that comes in handy. > >> filter() example: > >> > >> -- > >> ## Get a Practica record from the database > >> myPractica = Practica.get(1) > >> > >> ## Get the related Centros > >> myCentros = myPractica.centros > >> > >> ## Get a filtered list of the related Centros > >> ## Where descripCentro = 'Blah' > >> myCentrosFiltered = myPractica.centros.filter( > >> AND(Centro.q.descripCentro == 'Blah')) > >> == > >> > >> Hope this helps. > >> > >> -- > >> Rick > >> > > > > ------------------------------------------------------------------------- > > Using Tomcat but need to do more? Need to support web services, security? > > Get stuff done quickly with pre-integrated technology to make your job easier > > Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo > > http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642 > > _______________________________________________ > > sqlobject-discuss mailing list > > sql...@li... > > https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss > > > |