Saya menggunakan flask-migrate, SQLAlchemy dan alembic untuk mengelola database saya. Saya ingin membuat tabel baru di database. Tabel baru memiliki kolom yang menggunakan Enum yang sudah ada. Saya telah membaca banyak SO pertanyaan bahwa Anda dapat menggunakan Enum yang ada dengan tanda create_type=False. Ini sepertinya tidak bekerja untuk saya. Lihat fungsi upgrade() dalam file revisi saya di bawah ini.

def upgrade():
    op.create_table(
        'label',
        sa.Column('id', UUID(as_uuid=True), default=uuid4),
        sa.Column('labelText', sa.Text, nullable=False),  
        sa.Column('sourceCountry', sa.Enum('it', 'gb', 'gr', 'bg', 'pt', name='country', create_type=False), nullable=True),
        sa.PrimaryKeyConstraint('id'),
        sa.UniqueConstraint('id')

    )
    op.add_column('entity', sa.Column('labelId', UUID(as_uuid=True)))
    op.create_foreign_key(
        'fk_entity_label',
        'entity', 'label',
        ['labelId'], ['id'],
    )

Berikut adalah versi saya:

Flask==1.1.1
Flask-Ext==0.1
Flask-Migrate==2.5.3
Flask-Script==2.0.6
Flask-SQLAlchemy==2.4.1
alembic==1.4.1

Kesalahan saya:

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.DuplicateObject) type "country" already exists

[SQL: CREATE TYPE country AS ENUM ('it', 'gb', 'gr', 'bg', 'pt')]
(Background on this error at: http://sqlalche.me/e/f405)
3
DarioB 19 Maret 2020, 21:59

2 jawaban

Jawaban Terbaik

Menemukan masalahnya. Saya menggunakan sqlalchemy.Enum(), di mana saya harus menggunakan postgres.ENUM() sebagai gantinya. Perubahan yang membuat semuanya bekerja.

3
DarioB 20 Maret 2020, 14:51

Kesalahan yang sama terjadi selama pemutakhiran labu. Dengan mengubah atribut nama, itu berfungsi dengan baik.

name = 'country' to name = 'country_name'

ATAU jika Anda menggunakan Postgres dengan pgadmin4, hapus objek tipe 'negara' dan jalankan kembali.

0
Khine Zar Thwe 21 Juli 2020, 13:45