在django中以模型方式定义数据库

时间:2017-08-02 09:53:57

标签: python django database django-models

我只是试图在Django中找到定义数据库模型的解决方案。 比如在我的settings.py中有三个数据库

settings.py

private void CheckIsNumeric(TextCompositionEventArgs e)
{
    int result;
  string removedSpaces =  e.Text.Replace(" ","");
    if (!(int.TryParse(removedSpaces, out result)))
    {
       e.Handled = true;
       MessageBox.Show("!!!no content!!!", "Error", 
                       MessageBoxButton.OK, MessageBoxImage.Exclamation);
    }
}

在我的民意调查/ models.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'),
    },
}

现在我想在db_one数据库中添加问题模型,在db_two数据库中添加Choice模型,那我该怎么做呢

我尝试使用路由器跟随此multiple databases and multiple models in django 但它只是在我尝试将默认数据库中的空白设置尝试并尝试迁移后才更喜欢默认数据库

是在Django中为应用程序明确定义数据库的方法

2 个答案:

答案 0 :(得分:0)

您可以使用数据库my using方法。

例如,从db_one获取所有数据将如下所示:

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

答案 1 :(得分: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。{/ li>中注释掉您的models.py模型
  • 运行manage.py makemigrations =&gt;假设这创建了迁移001(对于Question模型)
  • Choice中取消注释models.py模型。
  • 再次运行manage.py makemigrations。假设这创建了迁移002(对于Choice模型)
  • 运行manage.py migrate <app-name> 001 --database=db_one =&gt;这将在db_one
  • 中创建问题模型
  • 运行manage.py migrate <app-name> 001 --database=db_two --fake =&gt;这
    将跳过db_two
  • 中表的创建
  • 运行python manage.py migrate <app-name> 002 --database=db_one --fake =&GT;这将跳过在db_one
  • 中创建Choice表
  • 运行python manage.py migrate <app-name> 002 --database=db_two =&gt;这将在db_two中创建Choice模型。