سؤال

على بيئة قاعدة بيانات متعددة, كيفية نقل كافة البيانات من قاعدة بيانات إلى أخرى?

تبدو الإعدادات كما يلي:

DATABASES = {
    'default': {},
    'users': {
        'NAME': 'user_data',
        'ENGINE': 'django.db.backends.sqlite3',
        'USER': 'user',
        'PASSWORD': 'superS3cret'
    },
    'customers': {
        'NAME': 'customer_data',
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'USER': 'cust',
        'PASSWORD': 'veryPriv@ate'
    }
}

هل هناك أي حل بسيط / التطبيق للقيام بذلك?على الرغم من أن الهجرة في اتجاه واحد كافية ، لأن هناك العشرات من النماذج والكائنات مع أوركينكي معقدة والعديد إلى العديد من الاتصالات ، والتكرار على النماذج والكائنات ، وحفظها في آخر لا يحل مشكلتي.

loaddata فشل أيضا ، لأن إنشاء الكائن يستخدم إشارات لإنشاء كائنات أخرى ، وهذا يفسد مفاتيح فريدة.

باستخدام مقالب سكل ليست تافهة حتى ، لأن الخلفية مختلفة.لقد حاولت هذا ، لم أتمكن من إدارة لجعل مقالب بسكل من قاعدة بيانات سكليت 3 بلدي ، والتي لا خبط المفاتيح الخارجية.

لذلك أنا بحاجة إلى حل ، الذي يحمل البيانات من قاعدة بيانات إلى أخرى ، ولكن لا يرسل إشارات ، ويعمل مع مفاتيح خارجية كذلك.لكنني لم أجد أي شيء يفعل ذلك.

هل كانت مفيدة؟

المحلول

أخيرا تمكنت من حل هذا.

أنا خلقت الجداول باستخدام

manage.py syncdb --all
manage.py migrate --fake

تحميل مقالب مع loaddata لم تنجح بسبب مشاكل النزاهة.(كسر القيود الرئيسية الخارجية ، على سبيل المثال)

لذلك اضطررت إلى تغيير طاولاتي.أزلت القيود المكسورة ، ومن ثم يمكنني الركض loaddata دون أي مشاكل.

ومع ذلك ، بالطبع كانت قاعدة البيانات الخاصة بي لا تزال مكسورة منذ أن أسقطت بضعة قيود.لذلك ، كان علي ببساطة تغيير طاولاتي مرة أخرى ، باستخدام psql شل.

جاء بغادمين في متناول اليدين ، منذ يظهر استعلامات تفريغ ذات الصلة على واجهة سهلة الاستخدام ، بشكل منفصل لكل قيود مختلفة.

نصائح أخرى

فما استقاموا لكم فاستقيموا مجرد كتابة السيناريو بيثون ل ترحيل المثيل من قاعدة بيانات واحدة إلى أخرى, ، قم بتشغيل هذا البرنامج النصي باستخدام جانغو-ملحقات رونسكريبت

على سبيل المثال

# Move Foo table data from one to another
for each_foo in Foo.objects.using("users").all():
  # _create foo instance in customer_data
  foo_obj, status = Foo.objects.using("customers").get_or_create(
                                            foo_name=each_foo.foo_name, 
                                            foo_code=each_foo.foo_code)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top