我正在使用SQLAlchemy核心与postgresql数据库,并且我想在我的表定义中添加ENUM类型。根据postgresql文档,必须在创建表之前定义ENUM类型:
CREATE TYPE gender_enum AS ENUM ('female', 'male');
CREATE TABLE person (
name VARCHAR(20),
gender gender_enum
);
问题在于我正在创建表定义时。在阅读了SQLAlchemy文档后,我没有找到任何实现示例。我尝试了像这样的东西,但它没有起作用:from sqlalchemy.dialects.postgresql import ENUM
person = Table('user_profile', metadata,
Column('name', String(20)),
Column('gender', ENUM('female', 'male'))
);
怎样完成这件事?
from sqlalchemy.dialects.postgresql import ENUM
。 - miahpostgreql.ENUM
不好使,但评论里又说可以。是不是因为版本或驱动的不同导致了这个矛盾呢? - dwandersoncreate_type=False
参数? - Hans Bouwmeestercreate_type
,它是针对sqlalchemy.dialects.postgresql.ENUM
的。简而言之,如果你想在create_table
命令期间定义并创建枚举类型,请使用sqlalchemy.Enum
。如果你想在创建新表时使用现有类型,请使用dialects.postgresql.ENUM
并将create_type = False
。 - kevlarrfrom sqlalchemy import Enum
来解决它,并且对于模式,我可以将schema=<schema_name>
传递给Enum
。Enum
类型文档: https://docs.sqlalchemy.org/en/13/core/type_basics.html#sqlalchemy.types.Enum.__init__ - lv10schema=<schema_name>
对我很有帮助:对于表的创建,它现在会正确地发出CREATE TYPE命令。 - Robert Muil