จะใช้ Enum กับสคีมาใน SQLAlchemy ได้อย่างไร

ฉันกำลังพยายามสร้างตารางภายในสคีมาโดยใช้ SQLAlchemy มีคอลัมน์ประเภท Enum ต่อไปนี้เป็นรหัส

import enum
import sqlalchemy
from sqlalchemy import Column, Text, Enum
from sqlalchemy.schema import CreateSchema
import sqlalchemy_utils
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class T(enum.Enum):
    X = 1
    Y = 2

ET = Enum(T, inherit_schema=True)
#ET = Enum(T, schema="schema1") # This works

class A(Base):
    __tablename__ = 'a'

    c1 = Column(Text, primary_key=True, nullable=False)
    c2 = Column(Text, nullable=False)
    c3 = Column(ET)

engine = sqlalchemy.create_engine("postgresql://postgres:[email protected]/mydb")

engine.execute(CreateSchema('schema1'))

schema_engine = engine.execution_options(schema_translate_map = { None: "schema1" } )
Base.metadata.create_all(schema_engine)

สิ่งนี้ล้มเหลวที่บรรทัด create_all โดยมีข้อผิดพลาดต่อไปนี้

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.DuplicateObject) มีประเภท t อยู่แล้ว [SQL: CREATE TYPE schema1.t AS ENUM ('X', 'Y')] (ความเป็นมาของข้อผิดพลาดนี้ที่: http://sqlalche.me/e/f405)

ฉันใช้รูปแบบนี้เนื่องจากฉันจะมีหลายสคีมาภายในซึ่งจะต้องสร้างตารางเดียวกัน


person Rahul    schedule 02.03.2021    source แหล่งที่มา


คำตอบ (1)


เหตุผลที่คุณได้รับข้อผิดพลาดเนื่องจากมีจุดบกพร่องในเวอร์ชันที่คุณเป็นอยู่ โดยใช้.

ฉันขอแนะนำให้ใช้สภาพแวดล้อมเสมือนจริงและใช้ SQLAlchemy เวอร์ชันเสถียรล่าสุด

person rfkortekaas    schedule 02.03.2021