Thread: [SQLObject] One time initialisation of attributes
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Martin C. <mar...@gm...> - 2005-02-14 07:55:48
|
I have a question regarding initialising fields to a certain value. I have an object like this: from sqlobject import * from mx.UID import * from password import * __connection__ = 'mysql://[...]:[...]@localhost/test' class User(SQLObject): def _init(self, id, *args, **kw): SQLObject._init(self, id, *args, **kw) self.uuid = UID() self.password = encrypt(self.password) _table = "user_table" uuid = StringCol(length=32, default=None) user_id = StringCol(alternateID=True, length=20) password = StringCol(length=30, notNone=True) first_name = StringCol(length=20, default=None) last_name = StringCol(length=20, default=None) email = StringCol(length=20, default=None) This, obviously(duh!) does not work. I would like to have the uuid assigned only at initial creation of the object, and the hashing of the password should only take place when the value change, not every time the object is instantiated. Any suggestion as how this could be accomplished ? /Martin |
From: Oleg B. <ph...@ma...> - 2005-02-14 09:02:20
|
On Mon, Feb 14, 2005 at 08:55:35AM +0100, Martin Clausen wrote: > This, obviously(duh!) does not work. I would like to have the uuid Not so obviously for me. (-: > assigned only at initial creation of the object, and the hashing of > the password should only take place when > the value change, not every time the object is instantiated. What is the difference between "initial creation" and instantiation? Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Brian B. <ex...@gm...> - 2005-02-14 10:39:34
|
Martin Clausen wrote: > class User(SQLObject): > > def _init(self, id, *args, **kw): > > SQLObject._init(self, id, *args, **kw) > self.uuid = UID() > self.password = encrypt(self.password) I think this particular case is simple enough for you to be able to use something like this (put this in your class definition, and ditch the _init method shown above): # Replace your uuid definition with this. # If no value is provided, UID() will be called. uuid = StringCol(length=32, default=UID) # Keep current password definition, add this. def _set_password(self, value): encrypted = encrypt(value) self._SO_set_password(encrypted) -- Brian Beck Adventurer of the First Order |
From: pkoelle <pk...@gm...> - 2005-02-14 11:22:58
Attachments:
smime.p7s
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Brian Beck wrote: | Martin Clausen wrote: | |> class User(SQLObject): |> |> def _init(self, id, *args, **kw): |> |> SQLObject._init(self, id, *args, **kw) |> self.uuid = UID() |> self.password = encrypt(self.password) | | | I think this particular case is simple enough for you to be able to use | something like this (put this in your class definition, and ditch the | _init method shown above): | | # Replace your uuid definition with this. | # If no value is provided, UID() will be called. | uuid = StringCol(length=32, default=UID) ~ ^^^^^ probably UID() here Paul -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org iD8DBQFCEg7iZMF3PJg2BX4RAo6tAJ9oSxE/pIzDeqDF3Z1iL6Kit+I9SwCgkK0o C3qDKLMCW7Hzk6hYJFyd1Bw= =+h1B -----END PGP SIGNATURE----- |
From: Oleg B. <ph...@ma...> - 2005-02-14 11:27:10
|
On Tue, Feb 15, 2005 at 04:01:55PM +0100, pkoelle wrote: > | uuid = StringCol(length=32, default=UID) > ~ ^^^^^ > probably UID() here No. This UUID() value will be remembered upon creation of the column, and so ypu'll have the same value for every instance. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Brian B. <ex...@gm...> - 2005-02-14 11:45:01
|
Oleg Broytmann wrote: > On Tue, Feb 15, 2005 at 04:01:55PM +0100, pkoelle wrote: > >>| uuid = StringCol(length=32, default=UID) >>~ ^^^^^ >>probably UID() here > > > No. This UUID() value will be remembered upon creation of the column, > and so ypu'll have the same value for every instance. > > Oleg. Clearing up Oleg's response... Putting UID() there would call the function when StringCol() is called and thus when uuid is defined in the class. Thus, it would be called once and its return value would be the default for every uuid. This is not what you want. Putting UID there instead makes SQLObject (which notices that UID is a callable) call UID() whenever a default value is needed, so each uuid will (hopefully) be unique. -- Brian Beck Adventurer of the First Order |
From: pkoelle <pk...@gm...> - 2005-02-15 10:43:38
Attachments:
smime.p7s
|
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Brian Beck wrote: | Putting UID there instead makes SQLObject (which notices that UID is a | callable) call UID() whenever a default value is needed, so each uuid | will (hopefully) be unique. Thanks a lot Brian, I assume this is true for all callable objects, hence one would write e.g: FloatCol(default=time.time) right? cheers ~ Paul -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org iD8DBQFCE/zbZMF3PJg2BX4RArjXAKC3aAhtVd4BeNz9tkgzlbxb2Q80JgCgm3F3 mYn9zGplNmyLIcAWqseHJ1M= =qtN9 -----END PGP SIGNATURE----- |
From: Madhuri N. <ma...@sc...> - 2005-02-16 02:58:05
|
Hi all, I am a newbie to sqlobject. So be patient with me. i have installed sqlobject 0.6.1-1. My underlying database is MySql. So far it is working great . But the problem comes while inserting new rows into a table. I followed exactly the way it is mentioned in docs but it is throwing the following error File "<stdin>", line 1, in ? File "/usr/lib/python2.2/site-packages/sqlobject/main.py", line 890, in __init__ self._create(id, **kw) File "/usr/lib/python2.2/site-packages/sqlobject/main.py", line 923, in _create self._SO_finishCreate(id) File "/usr/lib/python2.2/site-packages/sqlobject/main.py", line 947, in _SO_finishCreate id, names, values) File "/usr/lib/python2.2/site-packages/sqlobject/dbconnection.py", line 241, in queryInsertID return self._runWithConnection(self._queryInsertID, soInstance, id, names, values) File "/usr/lib/python2.2/site-packages/sqlobject/dbconnection.py", line 125, in _runWithConnection val = meth(conn, *args) File "/usr/lib/python2.2/site-packages/sqlobject/mysql/mysqlconnection.py", line 55, in _queryInsertID id = c.lastrowid AttributeError: Cursor instance has no attribute 'lastrowid' But when i check the database , i can see the row has been inserted correctly. Appreciate if someone helps me with this. Thanks Madhuri |
From: Ian B. <ia...@co...> - 2005-02-16 03:02:14
|
Madhuri Neerukonda wrote: > Hi all, > I am a newbie to sqlobject. So be patient with me. i have installed > sqlobject 0.6.1-1. My underlying database is MySql. So far it is working > great . But the problem comes while inserting new rows into a table. I > followed exactly the way it is mentioned in docs but it is throwing the > following error Hopefully someone can offer up a more detailed explanation, but this is a problem with the MySQLdb version you are using. Either old versions have a lastrowid and new versions don't, or the other way around. I thought this was fixed though, but it's hard to test multiple versions of the supporting libraries so I guess not. -- Ian Bicking / ia...@co... / http://blog.ianbicking.org |
From: Madhuri N. <ma...@sc...> - 2005-02-16 04:56:42
|
Ian Bicking wrote: > Madhuri Neerukonda wrote: > >> Hi all, >> I am a newbie to sqlobject. So be patient with me. i have >> installed sqlobject 0.6.1-1. My underlying database is MySql. So far >> it is working great . But the problem comes while inserting new rows >> into a table. I followed exactly the way it is mentioned in docs but >> it is throwing the following error > > > Hopefully someone can offer up a more detailed explanation, but this > is a problem with the MySQLdb version you are using. Either old > versions have a lastrowid and new versions don't, or the other way > around. I thought this was fixed though, but it's hard to test > multiple versions of the supporting libraries so I guess not. > Hi Again, Thanks for those inputs. It made me examine cursors.py source code of MySQLdb 0.9 and to my dismay i found there is no 'lastrowid' attribute. After a quick go thru in MySQL Reference manual , i gathered that i have to use insert_id(). Went back to sqlobject/mysql/mysqlconnection.py and changed line 57 to id = c.insert_id(). After this row insertion is fine. Can someone assure me that doing like this is ok and will not give headaches in the future Cheers Madhuri |
From: Andy T. <an...@gm...> - 2005-02-16 23:29:10
|
On Wed, 16 Feb 2005 12:56:39 +0800, Madhuri Neerukonda <ma...@sc...> wrote: > Ian Bicking wrote: > > > Madhuri Neerukonda wrote: > > > >> Hi all, > >> I am a newbie to sqlobject. So be patient with me. i have > >> installed sqlobject 0.6.1-1. My underlying database is MySql. So far > >> it is working great . But the problem comes while inserting new rows > >> into a table. I followed exactly the way it is mentioned in docs but > >> it is throwing the following error > > > > > > Hopefully someone can offer up a more detailed explanation, but this > > is a problem with the MySQLdb version you are using. Either old > > versions have a lastrowid and new versions don't, or the other way > > around. I thought this was fixed though, but it's hard to test > > multiple versions of the supporting libraries so I guess not. > > > Hi Again, > > Thanks for those inputs. It made me examine cursors.py source code > of MySQLdb 0.9 and to my dismay i found there is no 'lastrowid' > attribute. After a quick go thru in MySQL Reference manual , i gathered > that i have to use insert_id(). Went back to > sqlobject/mysql/mysqlconnection.py and changed line 57 to id = > c.insert_id(). After this row insertion is fine. Can someone assure me > that doing like this is ok and will not give headaches in the future > > Cheers > Madhuri > Is there any reason why you can't upgrade to MySQLdb 1.0 (or 1.0.1) ? According to the documentation it works with versions 3.22.32 and above. That way you won't need to patch SQLObject for it to work and can rely on the released code. Regards, Andy -- From the desk of Andrew J Todd esq |
From: John A. B. <ja...@os...> - 2005-02-18 00:22:25
Attachments:
signature.asc
SO.patch
|
Andy Todd wrote: > On Wed, 16 Feb 2005 12:56:39 +0800, Madhuri Neerukonda > <ma...@sc...> wrote: > >>Ian Bicking wrote: >> >> >>>Madhuri Neerukonda wrote: >>> >>> >>>>Hi all, >>>> I am a newbie to sqlobject. So be patient with me. i have >>>>installed sqlobject 0.6.1-1. My underlying database is MySql. So far >>>>it is working great . But the problem comes while inserting new rows >>>>into a table. I followed exactly the way it is mentioned in docs but >>>>it is throwing the following error >>> >>> >>>Hopefully someone can offer up a more detailed explanation, but this >>>is a problem with the MySQLdb version you are using. Either old >>>versions have a lastrowid and new versions don't, or the other way >>>around. I thought this was fixed though, but it's hard to test >>>multiple versions of the supporting libraries so I guess not. >>> >> >>Hi Again, >> >> Thanks for those inputs. It made me examine cursors.py source code >>of MySQLdb 0.9 and to my dismay i found there is no 'lastrowid' >>attribute. After a quick go thru in MySQL Reference manual , i gathered >>that i have to use insert_id(). Went back to >>sqlobject/mysql/mysqlconnection.py and changed line 57 to id = >>c.insert_id(). After this row insertion is fine. Can someone assure me >>that doing like this is ok and will not give headaches in the future >> >>Cheers >>Madhuri >> > > > Is there any reason why you can't upgrade to MySQLdb 1.0 (or 1.0.1) ? > According to the documentation it works with versions 3.22.32 and > above. That way you won't need to patch SQLObject for it to work and > can rely on the released code. An alternative is to modify SQLObject to support both older and newer versions of MySQLdb. I submitted a patch a while back to allow this: http://sourceforge.net/tracker/index.php?func=detail&aid=1040262&group_id=74338&atid=540672 Encouraging people to upgrade is a good policy, but not everyone works in an environment where they can (some admins won't upgrade the release packages on a given OS until the distributor does, for instance). No harm in accommodating them with such a tiny patch, I think. -jab -- John A. Barbuto ja...@os... Senior System Administrator, Open Source Technology Group http://www.ostg.com/ |
From: Oleg B. <ph...@ph...> - 2005-02-21 12:50:52
|
On Thu, Feb 17, 2005 at 04:22:00PM -0800, John A. Barbuto wrote: > http://sourceforge.net/tracker/index.php?func=detail&aid=1040262&group_id=74338&atid=540672 Applied and commited. Ian, please close it too. Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Ahmed M. A. <ahm...@wa...> - 2005-02-17 14:36:06
|
See http://article.gmane.org/gmane.comp.python.sqlobject/2511 Ahmed Brian Ray <br...@se...> wrote: >> How do I connect to a specific port? >> Does not work: >> conn = PostgresConnection('user=test dbname=testdb port=5555') >> conn = 'postgres://test@:5555/testdb' >> btw, also connecting through socket. >> Brian Ray - Chicago IL 773 835 9876 http://brianray.chipy.org >> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ sqlobject-discuss mailing list sql...@li... https://lists.sourceforge.net/lists/listinfo/sqlobject-discuss |
From: Tracy R. <tr...@re...> - 2005-02-16 03:37:46
|
Madhuri Neerukonda wrote: > Hi all, > I am a newbie to sqlobject. So be patient with me. i have installed > sqlobject 0.6.1-1. My underlying database is MySql. So far it is > working great . But the problem comes while inserting new rows into a > table. I followed exactly the way it is mentioned in docs but it is > throwing the following error > > File "<stdin>", line 1, in ? > File "/usr/lib/python2.2/site-packages/sqlobject/main.py", line 890, > in __init__ > self._create(id, **kw) > File "/usr/lib/python2.2/site-packages/sqlobject/main.py", line 923, > in _create > self._SO_finishCreate(id) > File "/usr/lib/python2.2/site-packages/sqlobject/main.py", line 947, > in _SO_finishCreate > id, names, values) > File "/usr/lib/python2.2/site-packages/sqlobject/dbconnection.py", > line 241, in queryInsertID > return self._runWithConnection(self._queryInsertID, soInstance, id, > names, values) > File "/usr/lib/python2.2/site-packages/sqlobject/dbconnection.py", > line 125, in _runWithConnection > val = meth(conn, *args) > File > "/usr/lib/python2.2/site-packages/sqlobject/mysql/mysqlconnection.py", > line 55, in _queryInsertID > id = c.lastrowid > AttributeError: Cursor instance has no attribute 'lastrowid' > > But when i check the database , i can see the row has been inserted > correctly. Appreciate if someone helps me with this. > > Thanks > Madhuri I just checkeed sqlobject 0.6.1 and was able to do a row insertion fine. I'm using MySQLdb-1.0 and MySQL 3.23.54 on Mac OS X. On another system, I have MySQLdb-1.0 and MySQL 4.0 with top-of-branch svn sqlobject and things work fine, too. What version of MySQLdb are you using? --Tracy |
From: Madhuri N. <ma...@sc...> - 2005-02-16 03:50:15
|
Tracy Ruggles wrote: > Madhuri Neerukonda wrote: > >> Hi all, >> I am a newbie to sqlobject. So be patient with me. i have >> installed sqlobject 0.6.1-1. My underlying database is MySql. So far >> it is working great . But the problem comes while inserting new rows >> into a table. I followed exactly the way it is mentioned in docs but >> it is throwing the following error >> >> File "<stdin>", line 1, in ? >> File "/usr/lib/python2.2/site-packages/sqlobject/main.py", line 890, >> in __init__ >> self._create(id, **kw) >> File "/usr/lib/python2.2/site-packages/sqlobject/main.py", line 923, >> in _create >> self._SO_finishCreate(id) >> File "/usr/lib/python2.2/site-packages/sqlobject/main.py", line 947, >> in _SO_finishCreate >> id, names, values) >> File "/usr/lib/python2.2/site-packages/sqlobject/dbconnection.py", >> line 241, in queryInsertID >> return self._runWithConnection(self._queryInsertID, soInstance, >> id, names, values) >> File "/usr/lib/python2.2/site-packages/sqlobject/dbconnection.py", >> line 125, in _runWithConnection >> val = meth(conn, *args) >> File >> "/usr/lib/python2.2/site-packages/sqlobject/mysql/mysqlconnection.py", >> line 55, in _queryInsertID >> id = c.lastrowid >> AttributeError: Cursor instance has no attribute 'lastrowid' >> >> But when i check the database , i can see the row has been inserted >> correctly. Appreciate if someone helps me with this. >> >> Thanks >> Madhuri > > > I just checkeed sqlobject 0.6.1 and was able to do a row insertion > fine. I'm using MySQLdb-1.0 and MySQL 3.23.54 on Mac OS X. On > another system, I have MySQLdb-1.0 and MySQL 4.0 with top-of-branch > svn sqlobject and things work fine, too. What version of MySQLdb are > you using? I am using MySQLdb-0.9 and MySQL 3.23.58 on Red Hat Linux > > --Tracy > > -- Madhuri Neerukonda Developer Scalable Systems Pte Ltd 7 Bedok South Road Singapore 469272 Tel : 65 6827 3967 Email : ma...@sc... http://www.scalablesystems.com |
From: Brian B. <ex...@gm...> - 2005-02-16 13:08:30
|
pkoelle wrote: > I assume this is true for all callable objects, hence one would write > e.g: FloatCol(default=time.time) right? You've probably tested this yourself by now, but yes, that is right. A really nice feature if you ask me! -- Brian Beck Adventurer of the First Order |