定義データベース
ジャンゴジャンゴで複数のデータベースを使用しての最初のステップは、あなたが使用するデータベース・サーバに伝えることです。
データベースには、お好みの任意の別名を持つことができます。ただし、エイリアスは 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を')
指定しない場合using
、save()
この方法は、ルータによって割り当てられたデフォルトのデータベースに保存されます。
別のデータベースにあるデータベースからオブジェクトを移動します
データベース・インスタンスに保存されている場合は、使用し 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://www.cnblogs.com/crazy-zjl/p/10251484.html