Kent Johnson wrote: > 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]) >
Dear Mr. Johnson, Thank you for doing your part to help eradicate SQL injection attacks. :-) Sincerely, The World (Seriously, though, after the discussion of last week, I always appreciate seeing good coding practices, even in example and meta code). > Note I am passing the data as a separate list, not using string > interpolation. Let the database worry about quoting, etc. > > Kent > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor > _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor