[Tutor] pgdb and unicode
Kent Johnson
kent37 at tds.net
Mon Oct 22 18:58:21 CEST 2007
Ismael Farfán Estrada wrote:
> Hi there.
> I have a small system in production with wxPython and PostgreSQL running on
> a machine with Centos 5.
> At first everytihing was running ok but now a weird bug was discovered:
> they can't insert characters like á é í ó ú ä ë ñ .... (non english characters)
> Does anyone knows how can I make pgdb accept that kind of characters?
> I wrote a little script...
>
> But first
> CREATE DATABASE test;
> CREATE TABLE tabla(
> cad character varying
> ) ;
>
> #!/usr/bin/python
> # -*- coding: utf8 -*-
> import pgdb
> con = pgdb.connect(user="farfan", password='000000', host='localhost', database='test')
> cur = con.cursor()
> cur.execute("INSERT INTO tabla VALUES ('é')")
> con.commit()
> cur.execute(u"INSERT INTO tabla VALUES ('é')")
> con.commit()
>
> As you can see, the first insert statement is executed in ascii format and is succeful,
> the second, which is in Unicode, fails
Why do you need the whole statement to be Unicode? It looks like the
database wants utf-8. Probably you should encode the data as utf-8 first.
> the problem is thas wxPython will allways send the script in unicode format...
What is coming from wxPython? I guess it is just the data value, not the
SQL statement or the entire script. Try something like
data= u'é' # Unicode data from wxPython
data = data.encode('utf-8')
cur.execute('INSERT INTO tabla VALUES (%s)', [data])
Note I am passing the data as a separate list, not using string
interpolation. Let the database worry about quoting, etc.
Kent
More information about the Tutor
mailing list