2017-08-02 81 views
0

我只是想在Django中找到一個明智的定義數據庫模型的解決方案。 喜歡在我的settings.py有三個數據庫在django中定義數據庫模型

settings.py

DATABASES = { 
    'default': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 
    }, 
    'db_one': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db_one.sqlite3'), 
    }, 
    'db_two': { 
     'ENGINE': 'django.db.backends.sqlite3', 
     'NAME': os.path.join(BASE_DIR, 'db_two.sqlite3'), 
    }, 
} 

在我的民意調查/ models.py

class Question(models.Model): 
    question_text = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 


    def __str__(self): 
     return self.question_text 

    def was_published_recently(self): 
     return self.pub_date >= timezone.now() - datetime.timedelta(days=1) 

@python_2_unicode_compatible 
class Choice(models.Model): 
    question = models.ForeignKey(Question, on_delete=models.CASCADE) 
    choice_text = models.CharField(max_length=200) 
    votes = models.IntegerField(default=0) 


    def __str__(self): 
     return self.choice_text 

現在我要補充問題模型db_one數據庫和選擇模型在db_two數據庫,所以我該怎麼做

我試着用路由器跟着這個multiple databases and multiple models in django 但它更喜歡只有默認的數據庫只有在那之後我試過放在默認數據庫空白設置,並嘗試遷移,但它給了我一個錯誤

是這樣定義的應用程序在Django

回答

0
明智數據庫

您可以使用數據庫我的using方法。

例如,獲取所有數據從db_one會是什麼樣子:

all_data = YourModel.objects.using('db_one').all()

+0

提取數據是後來在圖片後面首先我只是想創建該表到數據庫明智的問題是我不能遷移該表(創建表) – Kartik

0

你需要你的模型遷移到非默認的數據庫,對不對?

您可以在遷移時選擇數據庫。

# database name from settings.py 
./manage.py migrate --database=<database-name> 

django docs

如果你想保持在一個數據庫中的一些表和其他數據庫中的一些表,我建議每個表創建一個遷移。然後,你就可以運行

./manage.py migrate <your-app-name> <migration-number> --database=<database-name> 

編輯

您可以--fake標誌跳過特定數據庫的特定表的創建。

  • 首先,刪除所有的遷移。
  • 評論您的Choice模型在models.py
  • 運行manage.py makemigrations =>假設此生成的遷移001(對於Question模型)
  • models.py取消註釋你Choice模型。
  • 再次運行manage.py makemigrations。假設此生成的遷移002(對於Choice模型)
  • 運行manage.py migrate <app-name> 001 --database=db_one =>這將創建在db_one問題模型
  • 運行manage.py migrate <app-name> 001 --database=db_two --fake =>此
    將跳過在db_two
  • 運行的表的創建python manage.py migrate <app-name> 002 --database=db_one --fake = >這將跳過創建db_one中的選擇表
  • 運行python manage.py migrate <app-name> 002 --database=db_two =>這將在db_two中創建選擇模型。
+0

不,我想使用單獨的模型一個應用程序,當我遷移表,所以它只會創建默認數據庫 – Kartik

+0

你是什麼意思分開?將表的副本保存在不同的數據庫中? – ohannes

+0

不,我不想創建副本只有在db_one中創建問題模型副本,並且選擇表只是在db_two中創建,沒有默認或任何其他數據庫 – Kartik