如何__repr__从数据库模型中键入unicode

时间:2014-05-23 12:57:04

标签: python database python-2.7 unicode flask-sqlalchemy

在Win 7上使用Python 2.7.4和flask-sqlalchemy。

在我的数据库中,我有一个名为šaš šuđa的模型,如何在当前模型中以__repr__显示名称。

class Car(db.Model):
    __tablename__ = 'cars'
    id = db.Column(db.Integer, primary_key=True)
    county = db.Column(db.String(64))
    model = db.Column(db.UnicodeText(64))


def __repr__(self):
    return 'Country: %s  Model: %s' % (self.country, self.model)

我尝试使用u"{0}".format(self.model)得到相同的结果。

UnicodeEncodeError: 'ascii' codec can't encode character u'\u0111' in position 105: ordinal not in range(128)

1 个答案:

答案 0 :(得分:3)

在Python 2中,__repr__ 必须返回一个字节字符串;如果你不这样做,Python会尝试为你编码。

明确编码您的值:

def __repr__(self):
    return 'Country: %s  Model: %s' % (
        self.country.encode('utf8'), self.model.encode('utf8'))

如果您想与Jinja2一起返回unicode值,您可以改为定义__unicode__方法:

def __unicode__(self):
    return u'Country: %s  Model: %s' % (self.country, self.model)