Django - 여러 데이터베이스간에 데이터를 동기화합니다
-
23-12-2019 - |
문제
다중 데이터베이스 환경에서 모든 데이터를 데이터베이스에서 다른 데이터로 이동하는 방법은 무엇입니까?
설정은 다음과 같습니다.
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'
}
}
.
이 작업을 수행하는 간단한 솔루션 / 앱이 있습니까?단방향 마이그레이션은 충분하지만 복잡한 외국어와 다수의 연결이있는 수십 가지 모델과 객체가 있으므로 모델과 객체를 반복하고 다른 것으로 절약해도 내 문제가 해결되지 않습니다.
객체 작성이 신호를 사용하여 그행 개체를 만들어 고유 한 키를 망칩니다.SQL 덤프를 사용하면 백엔드가 다르기 때문에 심지어 사소한 것이 아닙니다.나는 이것을 시도했다, 나는 외래 키를 망치지 않는 내 sqlite3 데이터베이스에서 psql 덤프를 만들 수 없었다.
데이터베이스에서 다른 데이터베이스로 데이터를로드하는 해결책이 필요하지만 신호를 보내지 않고 외래 키와 함께 작동합니다.그러나 나는 이것을하는 것을 찾을 수 없었다.
해결책
마침내 나는 이것을 해결할 수 있었다.
i
를 사용하여 테이블을 만들었습니다.manage.py syncdb --all
manage.py migrate --fake
.
loaddata
로 덤프로드는 무결성 문제로 인해 작동하지 않습니다.(예를 들어, 깨진 외래 키 제약 조건, 예 :)
이므로 테이블을 바꿔야했습니다.나는 깨진 제약 조건을 제거한 다음 문제없이 loaddata
를 실행할 수 있습니다.
그러나 물론 부부의 제약 조건을 떨어 뜨린 이래로 물론 제 데이터베이스가 아직 고장났습니다.따라서 psql
셸을 사용하여 테이블을 다시 변경해야합니다.
pgadmin은 각각의 제약 조건에 대해 별도로 사용자 친화적 인 인터페이스에 대한 관련 덤프 쿼리를 보여주기 때문에 PGADMIN이 편리합니다.
다른 팁
하나의 데이터베이스에서 다른 데이터베이스에서 다른 데이터베이스로 이주하고 Django-extensions runscript
예 :
# 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)
.