PgArrays and Unicode ?

Roland Koebler <[email protected]> Sun, 1 Jun 2008 16:51:17 +0200
Newsgroups gmane.comp.python.db.pypgsql.user
Message-ID <20080601145117.GA3378@localhost>
hi,

I tried to insert unicode-values into a PostGreSQL-array, but
unfortunately that did not work but raised an UnicodeEncodeError (see
below). so:
- is is right, that pyPgSQL doesn't support unicode in arrays?
- if yes, how can this be solved?


here's the examle:

assume the following PostGreSQL-table:
    CREATE TABLE test (
	arr varchar[]
    );

now in python:
    >>> from pyPgSQL import PgSQL
    >>> db =3D PgSQL.connect(database=3D'test', user=3D'test', password=3D'=
test', client_encoding=3D('UTF-8','ignore'), unicode_results=3D1)
    >>> cu =3D db.cursor()
    >>> cu.execute(u"""INSERT INTO test (arr) VALUES(%s)""", PgSQL.PgArray(=
[u'=E4']))
    Traceback (most recent call last):
      File "<stdin>", line 1, in ?
      File "/usr/lib/python2.4/site-packages/pyPgSQL/PgSQL.py", line 3086, =
in execute
	parms =3D tuple(map(_quote, self.__unicodeConvert(parms)));
      File "/usr/lib/python2.4/site-packages/pyPgSQL/PgSQL.py", line 2257, =
in _quote
	return value._quote()
      File "/usr/lib/python2.4/site-packages/pyPgSQL/PgSQL.py", line 1328, =
in _quote
	return _handleArray(self.value)
      File "/usr/lib/python2.4/site-packages/pyPgSQL/PgSQL.py", line 2239, =
in _handleArray
	_j =3D '%s%s,' % (_j, PgQuoteString(str(_i), 1))
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xe4' in pos=
ition 0: ordinal not in range(128)

inserting non-unicode values works:
    >>> cu.execute(u"""INSERT INTO test (arr) VALUES(%s)""", PgSQL.PgArray(=
['=E4']))


regards,
Roland


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/