【问题标题】:In SQLAlchemy, how can I make enum type names use undescores in the database?在 SQLAlchemy 中,如何使枚举类型名称在数据库中使用下划线?
【发布时间】:2021-06-29 08:46:50
【问题描述】:

您可以在 SQLAlchemy 中使用__tablename__ 为您的表命名。似乎没有等效的方法可以对枚举类型执行此操作。

查看我在这里定义的枚举:

class NumberBought(enum.Enum):
    very_low = 'very_low'
    low = 'low'
    medium = 'medium'
    high = 'high'
    very_high = 'very_high'

这是它在 pgAdmin 中的显示方式:

我想要一种在名称中添加下划线的方法,以便在实际数据库中读取 number_bought 而不是 numberbought

我已经尝试了一些可能的语法,并查看了各种 StackOverflow 答案和SQLAlchemy docs 这样做,但还没有找到方法。

  1. 这可能吗?如何做?
  2. 如果这不可能,如果有 2 个具有相同名称的枚举(例如,称为“产品”或“价格”的 2 个不同的枚举)会导致问题

【问题讨论】:

标签: python postgresql enums sqlalchemy


【解决方案1】:

是的,这是可能的。您需要将name 添加到包含sa.Enum type 的列定义中:

from sqlalchemy import Column, Enum
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Test(Base):
    __tablename__ = 'Test'

    id = Column(Integer, primary_key=True)
    value = Column(Enum(NumberBought, name='number_bought'))

如果您想在另一个表中使用相同的enum,您还需要使用相同的定义,包括上面的名称。

【讨论】:

猜你喜欢
  • 2018-07-25
  • 2019-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
  • 2012-12-26
  • 2014-12-14
相关资源
最近更新 更多