Here is exception when my script insert unicode data:
--------------------------------[part of ticket
message]-------------------------------------------------------------------------------------
File "/var/www/vhosts/help4me.ru/subdomains/web2py/httpdocs/gluon/
sql.py", line 1480, in insert
self._db._execute(query)
File "/var/www/vhosts/help4me.ru/subdomains/web2py/httpdocs/gluon/
sql.py", line 734, in <lambda>
self._execute = lambda *a, **b: self._cursor.execute(*a, **b)
File "/usr/lib/python2.4/site-packages/MySQLdb/cursors.py", line
146, in execute
query = query.encode(charset)
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position
55: ordinal not in range(128)
-------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------[part of
controller]----------------------------------------------------------------------------------------------
login = u"Бла"
email = request.vars.email
passw = request.vars.passw
code = uuid.uuid4()
tusers.insert( login = login, email = email,
passw = passw, state = code )
-------------------------------------------------------------------------------------------------------------------------------------------------------
I try to convert login to unicode string and also try to pass non
unicode string. Error in two cases be the same.
MySQL database and table use "UTF8" encoding.
And insertion unicode data from phpMyAdmin works very well.
Now i try to execute code below:
**** this code fail
db._cursor.execute( "INSERT INTO users (login, passw, email, state)
VALUES ( 'бла', 'bla', 'bla', 'bla' )" )
**** this code sucess
db._cursor.execute( u"INSERT INTO users (login, passw, email, state)
VALUES ( 'бла', 'bla', 'bla', 'bla' )" )
**** Now possible solution:
Convert query to unicode python string before passing it to db._execute
( ... )
Example:
------------------------------[gluon.sql]-----------------------------
<....>
def insert(self, **fields):
query = self._insert(**fields)
query = query.decode( 'utf8' )
self._db['_lastsql'] = query
self._db._execute(query)
<....>
---------------------------------------------------------------------------
Also need convertions in select, executesql.
Python MySQLdb need unicode string for successfull execution of
query = query.encode(charset)
But web2py by default set "charset" to 'uft8' when creates new
database object and does not pass to MySQLdb module unicode strings.
Sorry for my english.
P.S. after insertion a couple of lines "query = query.decode
( 'utf8' )" into sql.py all works now !
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"web2py Web Framework" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/web2py?hl=en
-~----------~----~----~----~------~----~------~--~---