Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

कैसे Django ढांचे में एक विरासत डेटाबेस को संभालने के लिए

संबंधित वस्तुओं को थोड़ा अधिक कुशलता से पुनः प्राप्त करने के लिए आप लीगेसी मॉडल में कुछ तरीके जोड़ सकते हैं:

class Listflower(models.Model):
    especies_id = models.AutoField(primary_key=True)
    family_id = models.IntegerField(blank=True, null=True)
    especies = models.CharField(max_length=255, blank=True, null=True)
    

    class Meta:
        managed = False
        db_table = 'listflower'

    def get_family(self):
        return FamilyModel.objects.get(family_id=self.family_id)


class Estate(models.Model):
    estate_id = models.AutoField(primary_key=True)
    estate_name = models.CharField(max_length=100, blank=True, null=True)
 

    class Meta:
        managed = False
        db_table = 'estates'

    def get_flowers(self):
        flower_ids = Flower2Estate.objects.filter(estate_id=self.estate_id).values_list('especies_id', flat=True)
        return Listflower.objects.filter(especies_id__in=flower_ids)

लेकिन अगर यह आखिरी बार नहीं है जब आप इस डेटा के साथ काम करते हैं तो शायद बेहतर तरीका है कि नियमित django मॉडल को fks के साथ परिभाषित करें और विरासत डेटा को एक नई मॉडल संरचना में बदलने के लिए एक बार एक स्क्रिप्ट लिखें। चुनौती में एक घंटे से अधिक समय नहीं लगना चाहिए।

अपडेट करें

class FlowerFamily(models.Model):
    # assuming you old family model has 
    # "family_id" and "family_name" fields
    family_id = models.IntegerField(blank=True, null=True)
    family_name = models.CharField(max_length=255, blank=True, null=True)


class Flower(models.Model):
    # you might want preserve old model fields in the new model
    # at least id fields
    especies_id = models.IntegerField(blank=True, null=True)
    family_id = models.IntegerField(blank=True, null=True)
    especies = models.CharField(max_length=255, blank=True, null=True)

    family = models.ForegnKey(FlowerFamily, related_name='flowers')


class NewEstate(models.Model):
    estate_id = models.IntegerField(blank=True, null=True)
    estate_name = models.CharField(max_length=100, blank=True, null=True)
    flowers = models.ManyToManyField(Flower, related_name='estates')




# this is a slightly primitive example
# in real life you might want to use get_or_create instead of direct creation 
# in case script fails and you'll need to run it again
# also objects.get() might better be used with try-except ObjectDoesNotExist
def convert_legacy():
    # create new instances
    for ff in YourOldFamilyModel.objects.all():
        new_ff = FlowerFamily(family_id=ff.family_id, family_name=ff.family_name)
        new_ff.save()

    for fl in Listflower.objects.all():
        new_fl = Flower(...)

        family = FlowerFamily.objects.get(family_id=fl.family_id)

        new_fl.family = family
        new_fl.save()
    
    # same thing for Estate
    for ...:
        new_estate ...
        new_estate.save()

        # and restore relations
        flower_ids = Flower2Estate.objects.filter(estate_id=new_estate.estate_id).values_list('especies_id', flat=True)

        for new_lf in Flower.objects.filter(especies_id__in=flower_ids):
            new_estate.flowers.add(new_fl)
        
    
    



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PDO त्रुटि - PDOException 'संदेश के साथ' SQLSTATE [HY000]:सामान्य त्रुटि'

  2. MySQL फुलटेक्स्ट सर्च में गलत स्पेलिंग से निपटने का सबसे अच्छा तरीका

  3. PHP स्ट्रेटोटाइम () 1 घंटे से गलत काम करता है?

  4. XML फ़ाइलों को SQL डेटाबेस में बदलने का स्वचालित तरीका?

  5. जावा अपवाद त्रुटि - स्क्लाइट तैयारस्टेटमेंट.सेटब्लॉब