gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 00:44:08 25 4
gpt4 key购买 nike

我当前的项目正在扩展地理内容,因此我正在尝试集成 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com