La migrazione Alembic estera autoreferenziale per un database SQLite:Alambicco SQLite ALTER TABLE con chiave
def upgrade():
with op.batch_alter_table('my_table') as batch_op:
batch_op.add_column(sa.Column('parent_id', sa.String(24)))
batch_op.create_foreign_key('parent_constraint', 'my_table', ['parent_id'], ['id'])
che dovrebbe creare una chiave esterna parent_id
riferimento id
della stessa tabella my_table
, crea un riferimento ad un tavolo chiamato _alembic_batch_temp
:
CREATE TABLE "my_table" (
id VARCHAR(24) NOT NULL,
parent_id VARCHAR(24),
PRIMARY KEY (id),
CONSTRAINT parent_constraint FOREIGN KEY(parent_id) REFERENCES _alembic_batch_temp (id)
)
Come creare vincoli autoreferenziali quando si modifica una tabella?
A quanto pare, la tua soluzione non è più necessario, almeno da SQLite 3.13.0 (.Net 1.0.102.0). Ho testato questo scenario esatto (il primo) con questa versione e funziona come previsto: l'auto riferimento è rinominato con la tabella. Ho anche provato con un errore di cancellazione CASCADE ei miei dati sono rimasti dove dovevano essere :) – Yaurthek