[Sqlalchemy-tickets] Issue #3354: PostgreSQL non-native Enum fails with unicode (zzzeek/sqlalchemy)
Brought to you by:
zzzeek
|
From: Thomas T. <iss...@bi...> - 2015-04-04 13:18:10
|
New issue 3354: PostgreSQL non-native Enum fails with unicode https://bitbucket.org/zzzeek/sqlalchemy/issue/3354/postgresql-non-native-enum-fails-with Thomas Tanner: sqlalchemy 0.9.9, python 2.7.9, osx, PostgreSQL database with encoding unicode. ``` #!python # -*- coding: utf8 -*- from sqlalchemy.types import String, Integer, Enum from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, create_engine from sqlalchemy.orm import Session import sys Base = declarative_base() class Thing(Base): __tablename__ = 'thing' id = Column(Integer, primary_key=True) name = Column(String(1)) value = Column(Enum('B',u'Ü',name='myvalue', native_enum=False, convert_unicode=None)) engine = create_engine(sys.argv[1], echo=True, client_encoding='utf8') Base.metadata.create_all(engine) sess = Session(engine) sess.add(Thing(name='A', value=u'Ü')) sess.commit() sess.query(Thing).filter_by(name='A').first() ``` ``` Traceback (most recent call last): File "./utfbug.py", line 23, in <module> sess.query(Thing).filter_by(name='A').first() File "<path>/sqlalchemy/orm/query.py", line 2370, in first ret = list(self[0:1]) File "<path>/sqlalchemy/orm/query.py", line 2231, in __getitem__ return list(res) File "<path>/sqlalchemy/orm/loading.py", line 103, in instances util.raise_from_cause(err) File "<path>/sqlalchemy/util/compat.py", line 199, in raise_from_cause reraise(type(exception), exception, tb=exc_tb) File "<path>/sqlalchemy/orm/loading.py", line 74, in instances rows = [process[0](row, None) for row in fetch] File "<path>/sqlalchemy/orm/loading.py", line 459, in _instance populate_state(state, dict_, row, isnew, only_load_props) File "<path>/sqlalchemy/orm/loading.py", line 309, in populate_state populator(state, dict_, row) File "<path>/sqlalchemy/orm/strategies.py", line 169, in fetch_col dict_[key] = row[col] UnicodeEncodeError: 'ascii' codec can't encode character u'\xdc' in position 0: ordinal not in range(128) ``` if I set convert_unicode=False, it works fine. mysql ist not affected. |