如何在 Peewee 中实现 ENUM/SET
How to implement ENUM/SET in Peewee
我已经用 Peewee CHOICES 替换了 MariaDB 中的 ENUM 功能:
https://docs.peewee-orm.com/en/latest/peewee/models.html
class Catalog(BaseModel):
STATUS_CHOICES = (
(0,'New'),
(1,'Processing'),
(2,'Installed'))
status = CharField(max_length=10, verbose_name='Status', choices=STATUS_CHOICES, default='New', constraints=[SQL("DEFAULT 'New'")])
但是,我坚持要替换有点类似的 SET 功能:https://mariadb.com/kb/en/set-data-type/
这里是 SQL 语法中的字段:
`Ports` set('443','587','636','990','993','995','1054','3128','3129','3306','5432','6697','8000','8443','9443','61617') NOT NULL DEFAULT '443',
数据看起来像这样,基本上是一个具有有限选项集的多select字段:
+---------------+
| Ports |
+---------------+
| 443 |
| 8443 |
| 443,9443 |
| 3306 |
| 443,3128,8000 |
| 587 |
+---------------+
尽可能避免使用单独的 table 来保存此数据。
欢迎任何想法。
所以第一个选项是子类化并为集合类型创建自定义字段。我不确定它是如何工作的,因为我从来没有在 MariaDB 中使用过这个功能——但它应该是可能的。文档:http://docs.peewee-orm.com/en/latest/peewee/models.html#creating-a-custom-field
您可以尝试使用整数(通常为 64 位)的 Peewee 内置 BitField
,这样您就可以使用位掩码来有效地表示一组 64 个值——顺便说一句,我猜这个这就是 MariaDB 在幕后所做的事情。这里的文档:http://docs.peewee-orm.com/en/latest/peewee/models.html#bitfield-and-bigbitfield
我已经用 Peewee CHOICES 替换了 MariaDB 中的 ENUM 功能: https://docs.peewee-orm.com/en/latest/peewee/models.html
class Catalog(BaseModel):
STATUS_CHOICES = (
(0,'New'),
(1,'Processing'),
(2,'Installed'))
status = CharField(max_length=10, verbose_name='Status', choices=STATUS_CHOICES, default='New', constraints=[SQL("DEFAULT 'New'")])
但是,我坚持要替换有点类似的 SET 功能:https://mariadb.com/kb/en/set-data-type/
这里是 SQL 语法中的字段:
`Ports` set('443','587','636','990','993','995','1054','3128','3129','3306','5432','6697','8000','8443','9443','61617') NOT NULL DEFAULT '443',
数据看起来像这样,基本上是一个具有有限选项集的多select字段:
+---------------+
| Ports |
+---------------+
| 443 |
| 8443 |
| 443,9443 |
| 3306 |
| 443,3128,8000 |
| 587 |
+---------------+
尽可能避免使用单独的 table 来保存此数据。
欢迎任何想法。
所以第一个选项是子类化并为集合类型创建自定义字段。我不确定它是如何工作的,因为我从来没有在 MariaDB 中使用过这个功能——但它应该是可能的。文档:http://docs.peewee-orm.com/en/latest/peewee/models.html#creating-a-custom-field
您可以尝试使用整数(通常为 64 位)的 Peewee 内置 BitField
,这样您就可以使用位掩码来有效地表示一组 64 个值——顺便说一句,我猜这个这就是 MariaDB 在幕后所做的事情。这里的文档:http://docs.peewee-orm.com/en/latest/peewee/models.html#bitfield-and-bigbitfield