大家好,我是Leo
今天要來講解,在很多情況下可能不只使用一個db,這樣我們要如何設定及如何使用
OK~~~ Let's go now!!!
default 是預設的資料庫,server這名字是一個自訂義的名字,使用上待會會在views內說明,也可以不只增加一個database,可以建立多個關聯,如雲端GCP SQL..等等,自訂義名字不重複,且一定要存在預設資料庫也就是default。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': '3306',
'NAME': 'mydb',
'USER': 'root',
'PASSWORD': 'root',
},
'server': {
'ENGINE': 'django.db.backends.mysql',
'HOST': 'INSERT INTO YOUR DATABASE IP',
'PORT': 'INSERT INTO YOUR DATABASE PORT',
'NAME': 'INSERT INTO YOUR DATABASE NAME',
'USER': 'INSERT INTO YOUR USER',
'PASSWORD': 'INSERT INTO YOUR PASSWORD',
},
}
假設我們server內有一個tableName叫doggle,如下圖:
我們該如何撰寫model,因在models內的model會加上appname:"website_"在table name前面,該如何避免此情況發生。
models/doggle_model.py
from django.db import models
class Doggle(models.Model):
id = models.AutoField(primary_key=True)
sex = models.CharField(max_length=255)
age = models.IntegerField()
breed = models.CharField(max_length=255)
color = models.CharField(max_length=255)
class Meta:
db_table = "doggle"
managed = False
db_table 指定table name
managed = False 不生成新的table (預設會生成)
veiws/doggle.py
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework import permissions
from website.models import Doggle
from website.serializers import DoggleSerializer
class DoggleAPIView(APIView):
permission_classes = (permissions.AllowAny,)
authentication_classes = []
def post(self, request):
doggle = Doggle.objects.using('server').all()
serializer_doggle = DoggleSerializer(
doggle, many=True, context={"request": request}
)
return Response(serializer_doggle.data)
model.objects.using('server') 要使用哪個資料庫
也可以同時呼叫好幾個database
甚至也可以將db_table當變數使用
views/init.py
from .doggle import *
serializers/doggle_ser.py
from rest_framework import serializers
from website.models import Doggle
class DoggleSerializer(serializers.ModelSerializer):
class Meta:
model = Doggle
fields = "__all__"
serializers/init.py
from .doggle_ser import *
from django.urls import path
from website.views import DoggleAPIView
path('api/doggle/list',DoggleAPIView.as_view(),name='api-doggle')
今天透過model.objects.using(name) -> name需在setting先設置 的方式,就可以同時使用好幾個不同的database甚至不同的ip address,可以從多個db整合資料在使用restframe method將data資訊呈現出來,明天我們要來講解,如果當今天dbtable是一個變數,我們要如何設置與使用
我們明天見,各位掰掰~~~