0

私は django (v1.1) プロジェクトを mysql から postgresql (楽しい!) に移行中です。現在、すべてのデータを転送しています。manage.py dumpdata オプションを使用しようとしましたが、使用しているサーバーはかなり古く、非常に時間がかかります (すべてをメモリにロードする必要があるようです)。各アプリとその下の各モデルを処理する小さなスクリプトを思いつきました。簡略化されたバージョンを以下に示します。

 def dumpJson(model, outfile):  
    try:
            data = serializers.serialize("json", model.objects.all(),indent=4)                
    except model.DoesNotExist:
            print model.__name__ , "Does not Exist (not Object)"
    except ObjectDoesNotExist:
            print model.__name__ , "Issue with the data, not sure what...."

            data = serializers.serialize("json", model.objects.all(),indent=4)
            data = data.decode("unicode_escape").encode("utf8")
            out = open(outfile, "w")
            out.write(data)
            out.close()        

def main():
    for app in get_apps():               
            for model in get_models(app):  
                    print " -- Dumping:", model.__name__
                    outfile = "json_dumps/" + model.__name__ + ".json"                        
                    dumpJson(model, outfile)

ただし、try catch ステートメントを削除すると、次のエラーが発生します:\

  -- Dumping: Institution
  Traceback (most recent call last):
  ...(nasty stacktrace)....      
  unity.trip.models.DoesNotExist: USNWRData matching query does not exist.

私のモデルは次のように定義されています。

class USNWRData(models.Model):
    rank = models.PositiveIntegerField(blank=True, null=False)
    name = models.CharField(max_length=255, blank=True, null=False)
    state = models.CharField(max_length=10, blank=True, null=False)
    public = models.BooleanField(blank=True, null=False)
    type = models.ForeignKey(USNWRType)

class Institution(models.Model):
    name = models.CharField(max_length=200)
    parent_institution = models.ForeignKey('self', blank=True, null=True)
    location = models.ForeignKey(Location, blank=True, null=True,related_name='old_location')
    type = models.ForeignKey(InstitutionType, blank=True, null=False )
    usnwr = models.ForeignKey(USNWRData, blank=True, null=True)
    locationnrm = models.ForeignKey(LocationNrm, blank=False, null=True)

私が理解しているように、このエラーの原因は、ある種のデータの不一致または外部キーの欠落によるものです。上記のモデルを考えると、何が問題だと思われますか? 私はそれで少し問題を抱えており、元の作者はずっといなくなっています。どんな助けでも大歓迎です!

編集: フル スタック トレードは次のとおりです。

 -- Dumping: Institution
 Traceback (most recent call last):
 File "custom_dump.py", line 38, in <module>
    main()
 File "custom_dump.py", line 34, in main
    dumpJson(model, outfile)
 File "custom_dump.py", line 16, in dumpJson
    data = serializers.serialize("json", model.objects.all(),indent=4)
 File "/usr/local/lib64/python2.5/site-packages/django/core/serializers/__init__.py", line 91, in serialize
    s.serialize(queryset, **options)
 File "/usr/local/lib64/python2.5/site-packages/django/core/serializers/base.py", line 48, in serialize
    self.handle_fk_field(obj, field)
 File "/usr/local/lib64/python2.5/site-packages/django/core/serializers/python.py", line 48, in handle_fk_field
    related = getattr(obj, field.name)
 File "/usr/local/lib64/python2.5/site-packages/django/db/models/fields/related.py", line 315, in __get__
    rel_obj = QuerySet(self.field.rel.to).using(db).get(**params)
 File "/usr/local/lib64/python2.5/site-packages/django/db/models/query.py", line 349, in get % self.model._meta.object_name)
unity.trip.models.DoesNotExist: USNWRData matching query does not exist.
4

1 に答える 1

0

Django フィクスチャは、小さなデータセット (たとえば、100 レコードの Foo OptionList アイテム) またはテスト フィクスチャ以外の目的にはまったく役に立たないことがわかりました。MySQL テーブルを CSV にエクスポートすることで、問題に取り組みます。

さらに、これを見てください:

http://wiki.postgresql.org/wiki/Converting_from_other_Databases_to_PostgreSQL#MySQL

于 2012-06-04T20:08:03.137 に答える