장고는 여러 데이터베이스와 상호 작용하는

원본 링크 : http://www.cnblogs.com/crazy-zjl/p/10251484.html

정의 데이터베이스

장고 장고에 여러 데이터베이스를 사용하는 첫 번째 단계는 당신이 사용하고자하는 데이터베이스 서버를 이야기하는 것입니다.

데이터베이스는 선택의 별칭을 가질 수 있습니다. 그러나 별칭은  default 특별한 의미가있다. 장고는 별칭을 사용하여  default 기본 데이터베이스로한다.

예를 들어,  settings.py 두 개의 데이터베이스의 정의, 기본 PostgreSQL 데이터베이스 및 MySQL 데이터베이스는 사용자라고 :

데이타베이스 =는 {
     ' 기본 ' {
         ' NAME ' : ' app_data ' ,
         ' 엔진 ' : ' django.db.backends.postgresql ' ,
         ' 사용자 ' : ' postgres_user ' ,
         ' PASSWORD ' : ' s3krit는 ' 
    } 
    ' 사용자 ' : {
         ' NAME ' : '사용자 _ ',
         ' 엔진 ' : ' django.db.backends.mysql ' ,
         ' 사용자 ' : ' mysql_user ' ,
         ' PASSWORD ' : ' priv4te ' 
    } 
}
코드보기

다음 예는  settings.py 두 개의 기본이 아닌 데이터베이스 및 정의  의도적으로 빈을 :default 数据库

데이타베이스는 = {
     ' 기본 ' {}
     ' 사용자 ' : {
         ' NAME ' : ' 사용자 _ ' ,
         ' 엔진 ' : ' django.db.backends.mysql ' ,
         ' 사용자 ' : ' mysql_user ' ,
         ' PASSWORD ' : ' superS3cret ' 
    }, 
    ' 고객 ' : {
         'NAME ': ' customer_data ' ,
         ' 엔진 ' : ' django.db.backends.mysql ' ,
         ' 사용자 ' : ' mysql_cust ' ,
         ' PASSWORD ' : ' veryPriv @ 먹은 ' 
    } 
}
코드보기

데이터베이스 동기화

#의 기본 케이스를 사용하여 기본 데이터베이스가 기본 데이터베이스가 불평하는 데이터베이스를 지정하지 않고 비어있는 
파이썬은 마이그레이션 manage.py를 


#을 특정 데이터베이스를 사용하려면 데이터베이스 지정해야 
--database = 사용자를 마이그레이션 manage.py를 파이썬
코드보기

수동으로 데이터베이스 선택

쿼리를 사용하여 호출 할 수있는 경우 () 데이터베이스를 수동으로 선택합니다.

() 사용하여 쿼리를 실행할 별칭 데이터베이스에 매개 변수를 받아들입니다. 예를 들면 :

>>> # 이것은 '기본'데이터베이스를 실행합니다. 
>>> () Author.objects.all는

 >>> # 이것은 위와 같은 효과입니다. 
>>> Author.objects.using ( ' 기본 ' ) .ALL ( )

 >>> # 이 지정한 '다른'데이터베이스를 실행합니다. 
>>> Author.objects.using ( ' 기타 ' ) .ALL ()
코드보기

지정된 데이터베이스에 데이터를 저장하려면, 예를 들어, 개체를 저장하는  legacy_users 데이터베이스, 당신은이를 사용할 수 있습니다 :

(= 사용 my_object.save ' legacy_users를 ' )

지정하지 않으면 using, save()방법은 라우터에 의해 할당 된 기본 데이터베이스에 저장됩니다.

다른 데이터베이스에 하나의 데이터베이스에서 개체를 이동

당신이 데이터베이스 인스턴스에 저장 한 경우, 사용하는  save(using=...)새 데이터베이스로 마이그레이션 예를 들어. 당신은 몇 가지 의도하지 않은 결과를 초래할 수 있습니다 적절한 조치를 취할 수없는 경우.

p = 이용시 (NAME = " 프레드 " ) 
p.save (사용 = ' ' )   
p.save을 (사용 = ' ' )

Person객체를 저장 first, 데이터베이스 p기본 키, 장고 문제의 SQL이없는 INSERT문. 이것은 기본 키를 생성합니다, 장고는 기본 키에 할당됩니다p;

'두 번째'데이터베이스에 저장할 때 p기본 키 값을 가지고, 장고는 새 데이터베이스의 기본 키를 사용하려고 시도합니다. 경우 second데이터베이스가 기본 키 값이 아닌, 그 다음 어떤 문제가되지 않습니다, 객체는 새 데이터베이스에 복사됩니다. 그러나, 데이터베이스에서 해당 데이터는 해당 데이터가 덮어 쓰기 될 때.p的主键second

이 상황은 두 가지 방법으로 피할 수 있습니다. 첫째, 기본 키의 명확한 예 :

인격 = P (NAME = " 프레드 " ) 
p.save하십시오 (사용 = ' 먼저 ' ) 
p.pk = 없음 #는 P의 기본 키 값 제거 
p.save하십시오 (사용 = ' 번째 ' ) # 기본 키 p없이 작성 예

또는 force_insert를 사용하는 save(),장고 SQL을 실행할 수 있도록 INSERT:

p = 이용시 (NAME = " 프레드 " ) 
p.save (사용 = ' ' ) 
p.save을 (사용 = " " , force_insert = TRUE)을

데이터베이스를 선택 제거 할

기본 동작은 객체 데이터베이스의 인스턴스를 삭제하는 것입니다

= U (User.objects.using ' legacy_users ' ) 갔지 (사용자 이름 = ' 프레드 ' ) 
u.delete () #을 'legacy_users'데이터베이스에서 '프레드'삭제

(), 데이터베이스에 지정된 데이터를 삭제 전송 키워드를 사용하고 저장하는 것은 비슷합니다.

당신이에서 사용자하려는 경우 예를 들어,  legacy_users 로 마이그레이션 데이터베이스  new_users 데이터베이스를 다음과 같은 명령을 사용할 수 있습니다 :

user_obj.save는 (= 사용 ' NEW_USERS ' ) 
user_obj.delete합니다 (사용 = ' legacy_users 것은 ' ) #은 데이터를 지정된 데이터베이스를 삭제

 

메모, 수정의 신, 개인적인 사용을위한 환영 학습
자세한 장고 문서로는 :

https://docs.djangoproject.com/en/2.1/topics/db/multi-db/

HTTPS : //www.cnblogs.com/crazy-zjl/p/10251484.html 재현

추천

출처blog.csdn.net/weixin_30627341/article/details/94784362