django - 可以同时使用多个数据库和 South 吗?

标签 django django-south django-orm

我当前的项目正在扩展地理内容,因此我正在尝试集成 GeoDjango 并为初学者导入一些形状文件。我的设置包括以下内容:

  1. MySQL 5.0 作为“默认”数据库,以前是唯一的数据库。
  2. Spatialite 作为“gis”数据库,只能用于从 shapefile 导入区域
  3. 整个项目都使用South

现在我已经在一个新应用程序中为我的区域创建了一个 GeoDjango 模型。像往常一样,我已经完成了 ./manage.py schemamigration --initial ,当我尝试执行 ./manage.py migrate $my_new_app --database="gis" 时,它失败了,并出现 django.db.utils.DatabaseError: no such table: South_migrationhistory,我猜这是正确的,因为 south_migrationhistory 在我的主数据库中。

有人有此类设置的经验并可以帮助我吗?

编辑:我更改了标题,因为我意识到这个问题实际上并不是 GeoDjango 特定的。

最佳答案

我改进的灵魂:

在其他数据库中创建表 south_migrationhistory:

./manage.py syncdb --database="my_db_name_for_apps"

您现在可以使用标准:

./manage.py migrate my_app

这是我实际的db_router.py

# -*- coding: UTF-8 -*-
apps =['app1', 'app2' ]    
db_name = 'my_db_name_for_apps'

class sh_router(object):
    """A router to control all database operations on models from applications in apps"""

    def db_for_read(self, model, **hints):
        """Point all operations on apps models to db_name"""
        if model._meta.app_label in apps :
            return db_name
        return None

    def db_for_write(self, model, **hints):
        """Point all operations on apps models to db_name"""
        if model._meta.app_label in apps:
            return db_name
        return None

    def allow_relation(self, obj1, obj2, **hints):
        """Allow any relation if a model in apps is involved"""
        if obj1._meta.app_label in apps or obj2._meta.app_label in apps:
            return True
        return None

    def allow_syncdb(self, db, model):
        """Make sure the apps only appears on the db_name db"""
        if model._meta.app_label in ['south']:
            return True
        if db == db_name:
            return model._meta.app_label in apps
        elif model._meta.app_label in apps:
            return False
        return None

关于django - 可以同时使用多个数据库和 South 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7029228/

相关文章:

Django:强制选择相关?

django - 将子对象的特定字段连接到父对象?

python - 属性错误 : 'DjangoStrategy' object has no attribute 'backend' python social auth

mysql - Python Mange.py syncDB - 数据库错误

python - Django 模板中的命名冲突

Django 。赫罗库。删除 Heroku 上的迁移

django - 将 "through"表添加到 django 字段并与 South 一起迁移?

其他模型字段上的Django模型继承

python - Django 缓存查询(我不想这样)

Django Rest Framework - 调用 "Got a ` 时出现 `Note.objects.create()' TypeError`