pmo*_*niq 31 python sqlalchemy
在Django中,我们可以使用非常简单的"选择",例如:
GENDER_CHOICES = (
('M', 'Male'),
('F', 'Female'),
)
class Foo(models.Model):
gender = models.CharField(max_length=1, choices=GENDER_CHOICES)
Run Code Online (Sandbox Code Playgroud)
如何使用SQLAlchemy制作这样的东西?
est*_*tin 26
使用自定义类型.
例:
import sqlalchemy.types as types
class ChoiceType(types.TypeDecorator):
impl = types.String
def __init__(self, choices, **kw):
self.choices = dict(choices)
super(ChoiceType, self).__init__(**kw)
def process_bind_param(self, value, dialect):
return [k for k, v in self.choices.iteritems() if v == value][0]
def process_result_value(self, value, dialect):
return self.choices[value]
Run Code Online (Sandbox Code Playgroud)
rad*_*los 24
我可能会选择sqlalchemy_utils
Sym*_*ric 10
SQLAlchemy有一个Enum类型,其功能类似于Django的"选择"字段.
来自文档:
'Enum类型将使用后端的本机"ENUM"类型(如果有); 否则,它使用VARCHAR数据类型并生成CHECK约束.
import enum
class MyEnum(enum.Enum):
one = 1
two = 2
three = 3
t = Table(
'data', MetaData(),
Column('value', Enum(MyEnum))
)
connection.execute(t.insert(), {"value": MyEnum.two})
assert connection.scalar(t.select()) is MyEnum.two
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9413 次 |
| 最近记录: |