Skip to content

PostgreSQL non-native Enum fails with unicode #3354

@sqlalchemy-bot

Description

@sqlalchemy-bot

Migrated issue, originally created by Thomas Tanner (@ttanner)

sqlalchemy 0.9.9, python 2.7.9, osx,
PostgreSQL database with encoding unicode.

# -*- 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions