tortoise / aerich

A database migrations tool for TortoiseORM, ready to production.
https://github.com/tortoise/aerich
Apache License 2.0
804 stars 90 forks source link

Duplicates in migration #279

Closed Maksim-Burtsev closed 1 year ago

Maksim-Burtsev commented 1 year ago

Im change CharField to DateTime and use aerich migrate

Migration file look like this:

async def upgrade(db: BaseDBAsyncClient) -> str:
    return """
        ALTER TABLE "company" ALTER COLUMN "ogrn_data_reg" TYPE TIMESTAMPTZ USING "ogrn_data_reg"::TIMESTAMPTZ;
        ALTER TABLE "company" ALTER COLUMN "ogrn_data_reg" TYPE TIMESTAMPTZ USING "ogrn_data_reg"::TIMESTAMPTZ;
        ALTER TABLE "company" ALTER COLUMN "ogrn_data_reg" TYPE TIMESTAMPTZ USING "ogrn_data_reg"::TIMESTAMPTZ;
        ALTER TABLE "company" ALTER COLUMN "ogrn_data_reg" TYPE TIMESTAMPTZ USING "ogrn_data_reg"::TIMESTAMPTZ;
        ALTER TABLE "company" ALTER COLUMN "ogrn_data_reg" TYPE TIMESTAMPTZ USING "ogrn_data_reg"::TIMESTAMPTZ;"""

async def downgrade(db: BaseDBAsyncClient) -> str:
    return """
        ALTER TABLE "company" ALTER COLUMN "ogrn_data_reg" TYPE VARCHAR(255) USING "ogrn_data_reg"::VARCHAR(255);
        ALTER TABLE "company" ALTER COLUMN "ogrn_data_reg" TYPE VARCHAR(255) USING "ogrn_data_reg"::VARCHAR(255);
        ALTER TABLE "company" ALTER COLUMN "ogrn_data_reg" TYPE VARCHAR(255) USING "ogrn_data_reg"::VARCHAR(255);
        ALTER TABLE "company" ALTER COLUMN "ogrn_data_reg" TYPE VARCHAR(255) USING "ogrn_data_reg"::VARCHAR(255);
        ALTER TABLE "company" ALTER COLUMN "ogrn_data_reg" TYPE VARCHAR(255) USING "ogrn_data_reg"::VARCHAR(255);"""

I removed duplocate and successfully make aerich upgrade.

Is it ok?

long2ice commented 1 year ago

Strange, can you show yourr models?

Maksim-Burtsev commented 1 year ago

Is enough model where i made changes?

from src.core.utils.models import BaseModel
from tortoise import fields

IDENTIFYING_COMPANY_FIELDS = {'inn', 'ogrn'}

class Company(BaseModel):
    COMPANY_TYPES = ("AB", "CD", "EF")

    type = fields.CharField(20, default=COMPANY_TYPES[2])

    sub_type = fields.CharField(max_length=255, null=True)

    name_full = fields.CharField(max_length=255, null=True)
    name_short = fields.CharField(max_length=255, null=True)
    inn = fields.CharField(max_length=255, null=True)
    ogrn = fields.CharField(max_length=255, null=True)
    ogrn_data_reg = fields.DatetimeField(null=True)
    director = fields.CharField(max_length=255, null=True)
    email = fields.CharField(max_length=255, null=True)
    legal_address = fields.CharField(max_length=255, null=True)

    okopf = fields.CharField(max_length=255, null=True)
    kpp = fields.CharField(max_length=255, null=True)

    phone = fields.CharField(max_length=255, null=True)
mo-rijndael commented 1 year ago

Can confirm this happens. I changed type of a few columns from Int to Decimal, and for each column Aerich repeated ALTER TABLE ... five times

long2ice commented 1 year ago

fixed