diff --git a/ippisite/db.sqlite3 b/ippisite/db.sqlite3 index e706f0b079239a64eeb573670db3d1ab0790f483..57542b95b741e72c1e7980fb7ecdb36ade6e1767 100644 Binary files a/ippisite/db.sqlite3 and b/ippisite/db.sqlite3 differ diff --git a/ippisite/ippidb/management/commands/import_v1_data.py b/ippisite/ippidb/management/commands/import_v1_data.py index 4386708e747abb5a8aa46f40d5c90dcbd0a70683..704eed48f97226dcc1c9bcd0a963621146863ccd 100644 --- a/ippisite/ippidb/management/commands/import_v1_data.py +++ b/ippisite/ippidb/management/commands/import_v1_data.py @@ -2,7 +2,7 @@ from django.core.management import BaseCommand, CommandError import mysql.connector from ippidb.models import Bibliography, Protein, Taxonomy, MolecularFunction, \ - Domain, ProteinDomainBoundComplex, ProteinDomainPartnerComplex, Symmetry, Ppi, PpiComplex + Domain, ProteinDomainBoundComplex, ProteinDomainPartnerComplex, Symmetry, Ppi, PpiComplex, Disease class Command(BaseCommand): @@ -148,25 +148,29 @@ class Command(BaseCommand): self.stdout.write(self.style.SUCCESS('Successfully inserted {} {}'.format(row[0], row[1]))) if options['ppi']: sql_request_string = ''' -select distinct protein.NumUniprot, domain.PfamNumAccession, complexe.NbCopy, cmpdAction.IDComplexeBound, bindingSiteEvidence.CodePDB, 'part1', ppi.IDPPI from bindingSite inner join ppi on (bindingSite.IDBindingSite=ppi.IDBindingSite1) inner join complexe on (ppi.IDComplexe1=complexe.IDComplexe) left outer join cmpdAction on (complexe.IDComplexe=cmpdAction.IDComplexeBound) inner join protein on (bindingSite.IDProtein=protein.IDProtein) inner join domain on (bindingSite.IDDomain=domain.IDDomain) left outer join bindingSiteEvidence on (ppi.IDPPI=bindingSiteEvidence.IDPPI) +select distinct protein.NumUniprot, domain.PfamNumAccession, complexe.NbCopy, cmpdAction.IDComplexeBound, bindingSiteEvidence.CodePDB, 'part1', ppi.IDPPI, disease.Disease from bindingSite inner join ppi on (bindingSite.IDBindingSite=ppi.IDBindingSite1) inner join complexe on (ppi.IDComplexe1=complexe.IDComplexe) left outer join cmpdAction on (complexe.IDComplexe=cmpdAction.IDComplexeBound) inner join protein on (bindingSite.IDProtein=protein.IDProtein) inner join domain on (bindingSite.IDDomain=domain.IDDomain) inner join disease on (disease.IDPPI=ppi.IDPPI) left outer join bindingSiteEvidence on (ppi.IDPPI=bindingSiteEvidence.IDPPI) union -select distinct protein.NumUniprot, domain.PfamNumAccession , complexe.NbCopy, cmpdAction.IDComplexeBound, null, 'part2', ppi.IDPPI from bindingSite inner join ppi on (bindingSite.IDBindingSite=ppi.IDBindingSite2) inner join complexe on (ppi.IDComplexe2=complexe.IDComplexe) left outer join cmpdAction on (complexe.IDComplexe=cmpdAction.IDComplexeBound) inner join protein on (bindingSite.IDProtein=protein.IDProtein) inner join domain on (bindingSite.IDDomain=domain.IDDomain)''' +select distinct protein.NumUniprot, domain.PfamNumAccession , complexe.NbCopy, cmpdAction.IDComplexeBound, null, 'part2', ppi.IDPPI, disease.Disease from bindingSite inner join ppi on (bindingSite.IDBindingSite=ppi.IDBindingSite2) inner join complexe on (ppi.IDComplexe2=complexe.IDComplexe) left outer join cmpdAction on (complexe.IDComplexe=cmpdAction.IDComplexeBound) inner join protein on (bindingSite.IDProtein=protein.IDProtein) inner join domain on (bindingSite.IDDomain=domain.IDDomain) inner join disease on (disease.IDPPI=ppi.IDPPI)''' cursor.execute(sql_request_string) rows = cursor.fetchall() ProteinDomainBoundComplex.objects.all().delete() ProteinDomainPartnerComplex.objects.all().delete() + Disease.objects.all().delete() Ppi.objects.all().delete() PpiComplex.objects.all().delete() - self.stdout.write(self.style.SUCCESS('Successfully flushed protein domain complex tables and Ppi')) + self.stdout.write(self.style.SUCCESS('Successfully flushed protein domain complex, PPI, and disease tables')) ppi_ids_mapping = {} for row in rows: try: # create or retrieve Ppi object if row[5]=='part1': ppi = Ppi() + disease, created = Disease.objects.get_or_create(name=row[7]) ppi.pdb_id = row[4] ppi.symmetry = Symmetry.objects.get(code='AS') ppi.save() + ppi.diseases.add(disease) + ppi.save() ppi_ids_mapping[row[6]]=ppi.id else: ppi = Ppi.objects.get(id=ppi_ids_mapping[row[6]]) diff --git a/ippisite/ippidb/models.py b/ippisite/ippidb/models.py index f045b087a93e6dbbe25c192bfc62cb96e11fe537..adbe32e65068323be3701d58ea36ee9e4f6ca37b 100644 --- a/ippisite/ippidb/models.py +++ b/ippisite/ippidb/models.py @@ -149,9 +149,17 @@ class Symmetry(models.Model): def __str__(self): return '{} ({})'.format(self.code, self.description) + +class Disease(models.Model): + name = models.CharField('Disease', max_length=30, unique=True) # is there any database/nomenclature for diseases? + + def __str__(self): + return self.name + class Ppi(models.Model): pdb_id = models.CharField('PDB ID', max_length=4, null=True) symmetry = models.ForeignKey(Symmetry) + diseases = models.ManyToManyField(Disease) def __str__(self): return '{} PPI, PDB:{}'.format(self.symmetry.description, self.pdb_id or 'unknown') @@ -169,6 +177,7 @@ class Ppi(models.Model): #this is the less efficient query ever seen, FIXME return PpiComplex.objects.filter(ppi=self, complex__in=ProteinDomainBoundComplex.objects.all()) + class PpiComplex(models.Model): ppi = models.ForeignKey(Ppi) complex = models.ForeignKey(ProteinDomainComplex) @@ -180,10 +189,6 @@ class PpiComplex(models.Model): def __str__(self): return 'PPI {}, Complex {} ({})'.format(self.ppi, self.complex, self.cc_nb) -class Disease(models.Model): - ppi = models.ForeignKey(Ppi) - disease_name = models.CharField('Disease', max_length=30) # is there any database/nomenclature for diseases? - class Compound(models.Model): canonical_smile = models.CharField('Canonical Smile', unique=True, max_length=500)