Djangoは複数のデータベースと対話します

オリジナルリンク: http://www.cnblogs.com/crazy-zjl/p/10251484.html

定義データベース

ジャンゴジャンゴで複数のデータベースを使用しての最初のステップは、あなたが使用するデータベース・サーバに伝えることです。

データベースには、お好みの任意の別名を持つことができます。ただし、エイリアスは  default 特別な意味を持っています。Djangoは、エイリアスを使用する  default デフォルトのデータベースとして。

例えば、  settings.py 二つのデータベースの定義は、デフォルトのPostgreSQLデータベースおよびMySQLデータベースは、ユーザーと呼ばれます:

データベースは= {
     ' デフォルト' {
         ' NAME '' App_Dataに' ' ENGINE '' django.db.backends.postgresql ' ' USER '' postgres_user ' ' PASSWORD '' s3krit '
    }、
    ' ユーザ' {
         ' NAME '' USER_DATA ' ' ENGINE '' django.db.backends.mysql ' ' USER '' mysql_user ' ' PASSWORD '' priv4te '
    }
}
コードの表示

次の例では、  settings.py 二つの非デフォルトのデータベース、および定義  故意に空を:default 数据库

データベースは= {
     ' デフォルト' :{}、
     ' ユーザ' {
         ' NAME '' USER_DATA ' ' ENGINE '' django.db.backends.mysql ' ' USER '' mysql_user ' ' PASSWORD '' superS3cret "
    }、
    ' 顧客' :{
         ' NAME '' CUSTOMER_DATA ' ' ENGINE '' django.db.backends.mysql ' ' USER '' mysql_cust ' ' PASSWORD '' veryPriv @を食べました'
    }
}
コードの表示

データベースの同期

#のデフォルトのケースを使用して、デフォルトのデータベースは、デフォルトのデータベースは、データベースを指定せずに空になって文句を言うだろう
のpython manage.pyの移行を


特定のデータベースを使用するには、データベースを指定する必要があり 
、Pythonが--database =ユーザーを移行manage.pyの
コードの表示

手動で選択したデータベース

クエリを使用して起動することができる場合()データベースを手動で選択します。

()を使用してクエリを実行するためのエイリアスデータベースにパラメータを受け付けます。例えば:

>>> これが'デフォルト'のデータベースを実行します。 
>>> Author.objects.all()

>>> これは、上記と同様の効果がある。 
>>> Author.objects.using(' デフォルト' ).ALL()

>>> これは、指定された'その他'のデータベースを実行します。 
>>> Author.objects.using(' ').ALL()
コードの表示

指定されたデータベースにデータを保存するには、例えば、にオブジェクトを保存する  legacy_users データベース、あなたはこれを使用することができます。

(=使用my_object.save ' legacy_usersを'

指定しない場合usingsave()この方法は、ルータによって割り当てられたデフォルトのデータベースに保存されます。

別のデータベースにあるデータベースからオブジェクトを移動します

データベース・インスタンスに保存されている場合は、使用し  save(using=...)て新しいデータベースに移行する例として。あなたは、いくつかの予期しない結果をもたらす可能性がある、適切な措置を講じない場合。

P =人(名前= ' フレッド' 
(使用p.save = ' 最初の' 
p.save(使用 = ' '

Personオブジェクトを保存firstするデータベース、p主キー、Djangoの発行するSQLは存在しないINSERTステートメントが。これは、主キーを作成しますが、Djangoは主キーに割り当てられますp;

「第2」のデータベースに保存する場合、p主キーの値を持ち、Djangoは新しいデータベースの主キーを使用しようとします。場合はsecond、データベースが主キーの値ではありませんし、何の問題がないだろう、オブジェクトが新しいデータベースにコピーされます。しかし、データベース内の対応するデータは、対応するデータが上書きされたとき。p的主键second

この状況は、2つの方法で回避することができます。まず、主キーの明確な例:

P =人(名前= ' フレッド' 
(使用p.save = ' 最初の' 
p.pk =なしのPの主キー値削除 
p.saveを(=使用してSECOND 主キー例Pせずに書かれました

またはforce_insertを使用するようにsave(),DjangoはSQLを実行することを確実にするためにINSERT

P =人(名前= ' フレッド' 
(使用p.save = ' 最初の' 
p.save(使用 = ' '、force_insert =真)

削除するデータベースを選択

デフォルトのアクションは、オブジェクトデータベースのインスタンスを削除することです

U = User.objects.using(' legacy_users ')に.get(ユーザ名= ' フレッド' 
u.delete() 「legacy_users」データベース"フレッドから削除

若要删除指定数据库的数据,传递 using 关键字,和 save() 类似。

例如,如果要把一个 user 从 legacy_users 数据库迁移到 new_users 数据库中,可以使用以下命令:

user_obj.save(using='new_users')
user_obj.delete(using='legacy_users')#删除指定数据库的数据

 

学习自用,欢迎大神评论、指正
详情见Django文档:

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