首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQLAlchemy中带有PostgreSQL的ENUM类型

SQLAlchemy中带有PostgreSQL的ENUM类型
EN

Stack Overflow用户
提问于 2015-03-06 07:48:04
回答 4查看 25.8K关注 0票数 37

我使用SQLAlchemy芯和postgresql数据库,我想将ENUM类型添加到我的表定义中。根据postgresql文档,必须在创建表之前定义ENUM类型:

代码语言:javascript
运行
复制
CREATE TYPE gender_enum AS ENUM ('female', 'male');

CREATE TABLE person (
  name VARCHAR(20),
  gender gender_enum
);

问题是当我创建表定义时。在阅读了SQLAlchemy文档之后,我找不到任何实现示例。我试过这样的方法,但没有用:

代码语言:javascript
运行
复制
from sqlalchemy.dialects.postgresql import ENUM

person = Table('user_profile', metadata,
    Column('name', String(20)),
    Column('gender', ENUM('female', 'male'))
);

必须如何做呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-06 07:54:30

您需要从sqlalchemy导入Enum并向其添加一个名称。它应该是这样的:

代码语言:javascript
运行
复制
from sqlalchemy import Enum

person = Table("user_profile", metadata,
    Column("name", String(20)),
    Column("gender", Enum("female", "male", name="gender_enum", create_type=False))
);
票数 40
EN

Stack Overflow用户

发布于 2015-10-09 15:41:13

@Tim的回答肯定是正确的,但我想提供我设置ENUM的方式。

在我的models.py中,我将以元组的形式创建值

skill_levels = ('Zero', 'A little', 'Some', 'A lot')

然后,我将创建一个skill_level_enum变量,并为它分配一个技能级别值为args的ENUM类。

skill_level_enum = ENUM(*skill_levels, name="skill_level")

在我的表模型中,然后传入skill_level_enum

代码语言:javascript
运行
复制
class User(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    skill_level = db.Column(skill_level_enum)

我发现这使得我的代码更加简洁,并且我能够在我的文件顶部对skill_levels进行更新,而不是扫描我的模型以获得正确的更新。

票数 37
EN

Stack Overflow用户

发布于 2020-05-08 23:27:23

您还可以使用Python的原生枚举作为列类型:

代码语言:javascript
运行
复制
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.dialects.postgresql import ENUM as pgEnum
from enum import Enum, unique

@unique
class errorTypeEnum(Enum):
    videoValidation = 'videoValidation'
    audioValidation = 'audioValidation'
    subtitleValidation = 'subtitleValidation'

db = SQLAlchemy()

class Error(db.Model):
    serviceID = db.Column(db.String(20), primary_key=True)
    timestamp = db.Column(db.DateTime, unique=False, nullable=False)
    category = db.Column(pgEnum(errorTypeEnum), unique=False, nullable=False)
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28894257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档