Unicode -> Python -> DBAPI -> PyPgSQL -> PostgreSQL
Gerhard Häring
gh at ghaering.de
Mon Nov 3 05:00:32 EST 2003
Rene Pijlman wrote:
> I can't seem to find any way to specify the character encoding with the DB
> API implementation of PyPgSQL. There is no mention of encoding and Unicode
> in the DB API v2.0 spec and the PyPgSQL README. [...]
See section 2.2.5 in the pyPgSQL README:
pyPgSQL has a few extensions that make it possible to insert Unicode strings
into PostgreSQL and fetch unicode strings instead of byte strings from the
database.
The module-level connect() function has two Unicode-related parameters:
- client_encoding
- unicode_results
*client_encoding* accepts the same parameters as the encode method
of Unicode strings. If you also want to set a policy for encoding
errors, set client_encoding to a tuple, like ("koi8-r", "replace")
Note that you still must make sure that the PostgreSQL client is
using the same encoding as set with the client_encoding parameter.
This is typically done by issuing a "SET CLIENT_ENCODING TO ..."
SQL statement immediately after creating the connection.
If you also want to fetch Unicode strings from the database, set
*unicode_results* to 1.
For example, assuming a database created with *createdb mydb -E UNICODE*
and a
table *TEST(V VARCHAR(50))*:
>>> from pyPgSQL import PgSQL
>>> cx = PgSQL.connect(database="mydb", client_encoding="utf-8",
unicode_results=1)
>>> cu = cx.cursor()
>>> cu.execute("set client_encoding to unicode")
>>> cu.execute("insert into test(v) values (%s)", (u'\x99sterreich',))
>>> cu.execute("select v from test")
>>> cu.fetchone()
[u'\x99sterreich']
>>>
-- Gerhard
More information about the Python-list
mailing list