如何使用SqlAlchemy_Utils ChoiceType设置默认值

时间:2015-10-15 16:38:02

标签: python flask sqlalchemy flask-sqlalchemy

我刚刚从NoSQL迁移到SQL,而且我是SqlAlchemy ORM的新手。

在我的用例中,我需要模型中的一个字段才能存储给定的选择集:

# models.py
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.utils.types.choice import ChoiceType

Base = declarative_base()    

class User(Base):
    __tablename__ = 'user'
    USER_TYPES = [
       ('user', 'User'),
       ('admin', 'Admin User')
    ]

    id = Column(Integer(), primary_key=True)
    type = Column(ChoiceType(User_Types), default='user')

但是当我运行我的脚本时,我得到了:

> SAWarning: Unicode column 'None' has non-unicode default value 'user' specified.
  self.default

在我设置默认值并且不键入“ChoiceType”的其他字段上没有错误。

任何人都知道我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:7)

默认情况下,

ChoiceType列为Unicode(255)Unicode类型是String子类,它假定输入和输出为Python unicode数据。您应该将default设置为unicode string

type = Column(ChoiceType(USER_TYPES), default=u'user')

或者您可以设置impl参数

type = Column(ChoiceType(USER_TYPES, impl=String()), default='user')