On Feb 11, 2009, at 8:05 AM, 一首诗 wrote:

>
> Hi all,
>
> I'm using sqlalchemy as my ORM library and it works fines until today
> one of my test case fail
>
> ===================================================
> sqlalchemy.exc.ProgrammingError: (ProgrammingError) You must not use
> 8-
> bit bytestrings unless you use a text_factory that can interpret 8-bit
> bytestrings (like text_factory = str). It is highly recommended that
> you instead just switch your application to Unicode strings. u'INSERT
> INTO b_taa_role (role_name, activity, grantable, hierarchy, creator,
> related_smf, related_domain, priority) VALUES
> (?, ?, ?, ?, ?, ?, ?, ?)' ['\xe7\xae\xa1\xe7\x90\x86\xe5\x91\x98',
> None, None, None, None, None, None, 0]
> ===================================================
>
> The problem is : it only fails on one system.
>
> I've test the case in 3 computer, 2 ubuntu and 1 ubuntu server.
>
> It only fails on ubuntu server edition.
>
> The locale setting, python version, and sqlalchemy version is
> identical!
> As the final running environment is not decided yer,  I am afraid this
> will be a big problem.
>
> I have considered to use unicode every where,  but the problem is,
> most of the data will retrieved will be in utf8.  So if I choose
> unicode, I have to translate every string parameter.

unfortunately that's what's required.    The best practice in Python  
is that any data entering your application should be decoded to Python  
unicode objects immediately - that way you never need to be concerned  
about encodings within the application.   If/when you migrate to  
Python 3.0, its actually not possible to have a string object without  
decoding at some step.

the error message is raised by Pysqlite, and the reason its only on  
one system may be that the error message is a recent addition to  
pysqlite as of very recent versions.

A SQLAlchemy technique to convert the data as it becomes a bind  
parameter would be:

class UTF8String(TypeDecorator):
     impl = Unicode

     def process_bind_param(self, value, dialect):
         return value.decode('utf-8')



--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to