Bir silme işleminde sorun yaşıyorum. İki tablo var ve bunlar birçok çoğa eşlenir:Çoktan çoğa ilişkilendirme tablosuna silmek mi istiyorsunuz?
class File(object): pass
file_table = Table('file', metadata,
Column('id', Integer, primary_key=True, autoincrement=True),
Column('filename', String(255)),
}
class FileHost(object): pass
file_host = Table('host', metadata,
Column('id', Integer, primary_key=True, autoincrement=True),
Column('name', String(255)),
)
file_hosted = Table('file_hosted', metadata,
Column('id_host', Integer, ForeignKey('host.id')),
Column('id_file', Integer, ForeignKey('file.id'))
)
session.mapper(File, file_table, properties={
'host': relation(FileHost, secondary=file_hosted, backref='files',
cascade='all,delete-orphan', single_parent=True)
})
session.mapper(FileHost, file_host)
Bu hata alıyorum edilir:
sqlalchemy.exc.IntegrityError:
(IntegrityError) update or delete on table "file" violates
foreign key constraint "file_hosted_id_file_fkey" on table "file_hosted"
DETAIL: Key (id)=(50905) is still referenced from table "file_hosted".
herkes yanlış yapıyorum bir fikrim var mı?
Ben de soru on the sqlalchemy mailing list sordu ve doğru cevabı var:
Sen SQLAlchemy Dosya filehost için siler basamakla anlatıyorsun, ama bunu tersi istiyorum. Sen = basamaklarını taşıyarak bu sorunu giderebilirsiniz 'hepsi,-yetim sil' backref içine ve single_parent = Doğru cümleleri. Muhtemelen uselist = False.
session.mapper(File, file_table, properties={
'host': relation(FileHost,
backref=backref('files',
cascade='all,delete-orphan',
single_parent=True),
secondary=file_hosted,
uselist=False)
})
tam olarak ne çağlayan istiyorum: 'Dosya' silinmesini onun 'File's veya her ikisini silmek' FileHost' onun 'FileHost', silme silmek? – van
Bir "Dosyayı" sildiğimde, "file_hosted" içindeki uygun satırları silmeli. – tom
Bu hatayı üreten bir kod snippet'i ekleyebilir misiniz? – van