Thread: [SQLObject] optionaly "columnsFromSchema" use UnicodeCol instead of StringCol
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
From: Tomas <To...@ze...> - 2005-09-20 15:00:44
Attachments:
SQLObject.svn.diff
|
Hi, I'm using this modification of SQLObject: text/chars database columns can be detected as col.UnicodeCol if connection argument 'unicodeCols' is set to True. simple patch is attached (only for postgresql module). Tomas -- mailto: Tomas@Zemres.cz icq# 22996508 jabber://tn...@ja... |
From: Oleg B. <ph...@ph...> - 2005-09-20 15:06:01
|
On Tue, Sep 20, 2005 at 05:00:31PM +0200, Tomas wrote: > text/chars database columns can be detected as col.UnicodeCol if > connection argument 'unicodeCols' is set to True. > > simple patch is attached (only for postgresql module). Seems interesting. Thank you! I am going to run tests over it before applying. Any opinion if a similar approach can be used for MySQL? SQLite? Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: Tomas <To...@ze...> - 2005-09-20 15:39:51
|
In MySQL can be each table/column in diferent encoding. - see http://dev.mysql.com/doc/mysql/en/charset-show.html mysql> SHOW FULL COLUMNS FROM tablename; (The character set name is implied by the collation name.) sqlite connection instance has attribute 'encoding' this may be used for conversion as dbEncoding. T. On Tue, 2005-09-20 at 19:05 +0400, Oleg Broytmann wrote: > On Tue, Sep 20, 2005 at 05:00:31PM +0200, Tomas wrote: > > text/chars database columns can be detected as col.UnicodeCol if > > connection argument 'unicodeCols' is set to True. > > > > simple patch is attached (only for postgresql module). > > Seems interesting. Thank you! I am going to run tests over it before > applying. > > Any opinion if a similar approach can be used for MySQL? SQLite? > > Oleg. -- mailto: Tomas@Zemres.cz icq# 22996508 jabber://tn...@ja... |
From: Ian B. <ia...@co...> - 2005-09-20 15:49:26
|
Tomas wrote: > Hi, > > I'm using this modification of SQLObject: > > text/chars database columns can be detected as col.UnicodeCol if > connection argument 'unicodeCols' is set to True. > > simple patch is attached (only for postgresql module). What does this really mean? I mean, conceptually? I guess it comes back to what the behavior does when a database natively supports Unicode -- does StringCol work then (and return Unicode)? If so, then I can see a compatibility mode for databases (or database adapters) that don't have native Unicode support. But, it seems the best way to deal with that isn't to use UnicodeCol -- which is a very limited and localized solution to the problem -- but to do something like encoding the entire query, and decoding the results (based on cursor.description, I guess). Oh... wait, I see -- it's only with fromDatabase=True. That's fine... well actually, I wonder what the best place to put hints is? I guess per-class hints could be somewhat tiresome, though an abstract superclass would allow for that. -- Ian Bicking / ia...@co... / http://blog.ianbicking.org |
From: Oleg B. <ph...@ph...> - 2005-09-20 20:49:39
|
On Tue, Sep 20, 2005 at 05:00:31PM +0200, Tomas wrote: > text/chars database columns can be detected as col.UnicodeCol if > connection argument 'unicodeCols' is set to True. > > simple patch is attached (only for postgresql module). Tested, applied and committed at the revision 997. Thank you very much! Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: M. D. <md...@em...> - 2005-09-30 06:50:17
|
hi everyone, is unicode fully supported by sqlobject? i started to use it now and get lots of problems... one is that that i get the following exception: File "./db.py", line 593, in ? userLonzo=User.byName(u'lonzo') File "<string>", line 1, in <lambda> File "sqlobject/main.py", line 1248, in _SO_fetchAlternateID result, obj = cls._findAlternateID(name, dbName, value, connection) File "sqlobject/main.py", line 1244, in _findAlternateID value), None File "sqlobject/dbconnection.py", line 578, in _SO_selectOneAlt return self.queryOne("SELECT %s FROM %s WHERE %s = %s" % File "sqlobject/dbconnection.py", line 346, in queryOne return self._runWithConnection(self._queryOne, s) File "sqlobject/dbconnection.py", line 217, in _runWithConnection val = meth(conn, *args) File "sqlobject/dbconnection.py", line 339, in _queryOne self._executeRetry(conn, c, s) File "sqlobject/dbconnection.py", line 295, in _executeRetry return cursor.execute(query) TypeError: argument 1 must be str, not unicode with a class User(sqlobject.SQLObject): name=sqlobject.UnicodeCol(varchar=True, alternateID=True, ) ... when using the byName method with a unicode string. using a pure string works fine. also i get File "sqlobject/sresults.py", line 149, in __iter__ return iter(list(self.lazyIter())) File "sqlobject/sresults.py", line 157, in lazyIter return conn.iterSelect(self) File "sqlobject/dbconnection.py", line 361, in iterSelect select, keepConnection=False) File "sqlobject/dbconnection.py", line 686, in __init__ self.dbconn._executeRetry(self.rawconn, self.cursor, self.query) File "sqlobject/dbconnection.py", line 295, in _executeRetry return cursor.execute(query) TypeError: argument 1 must be str, not unicode for other where clauses build with sqlbuilder using unicode strings. i think all this trouble of converting charcodes back and forth (my database has encoding unicode also) wouldn't be needed at all but who throws this TypeError? i did not find that in sqlobject. best regards, michael |
From: Oleg B. <ph...@ma...> - 2005-09-30 09:14:23
|
On Fri, Sep 30, 2005 at 08:49:11AM +0200, M. Dietrich wrote: > File "./db.py", line 593, in ? > userLonzo=User.byName(u'lonzo') The problem here is not with unicode, but with .by*() method - they do not pass values via from_python() validators/converters. Do it yourself: userLonzo=User.byName(u'lonzo'.encode(dbEncoding)) or use .select(): userLonzo = User.select(name=u'lonzo')[0] Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |
From: M. D. <md...@em...> - 2005-10-02 21:26:46
|
hi Oleg, On Sat, Oct 01, 2005 at 07:59:40PM +0400, Oleg Broytmann wrote: > On Sat, Oct 01, 2005 at 10:48:24AM +0200, M. Dietrich wrote: > > > second: my database is running unicode why > > should someone have to convert it? > > Because SQLObject is an *universal* wrapper, and there is a price > for this universalism. Should SQLObject do different jobs for > unicode and non-unicode databases? yes, it does already. somenone added code to detect the encoding of the database. i think my other issue about bind vars would help alot here. i would help work on this but can't do that alone, so i ask again: can someone help me? best regards, michael |
From: Oleg B. <ph...@ma...> - 2005-10-02 21:51:25
|
On Sat, Oct 01, 2005 at 09:53:21PM +0200, M. Dietrich wrote: > i would help work on this but can't do that alone, so i ask > again: can someone help me? What kind of help do you need? Oleg. -- Oleg Broytmann http://phd.pp.ru/ ph...@ph... Programmers don't die, they just GOSUB without RETURN. |