python - Django 多个数据库 - 关系不存在;第 1 行 : SELECT COUNT(*) AS "__count" FROM

标签 python django django-models django-admin

我正在使用两个数据库,一个 Mysql 另一个是 PostgreSql。

  • Mysql 定义为'default',PostgreSql 定义为'location_db'
  • 我有 5 个应用程序,比如说“a、b、c、d、位置”应用程序,
  • 除了位置应用程序,所有应用程序都应该在“默认”数据库上运行所有内容,
  • 我只是做' python manage.py runserver '然后一切正常,甚至站点也可以正常工作,但是当我在管理页面然后单击'位置'管理模型时,它运行错误 * 关系“location_locationmodel”不存在;第 1 行:SELECT COUNT(*) AS "__count"FROM "location_locationmodel"* 另一方面,如果我单击“abcd”管理模型,它就可以正常工作。

  • 1)这是 router.py(我只是从 doc.django 站点获取路由器代码,也许这些代码不适合我,因为我只是猜测我的路由器配置不正确?也许?)
    class LocationRouter(object):
    
    """
        A router to control all database operations on models in the
        auth application.
        """
        def db_for_read(self, model, **hints):
            """
            Attempts to read auth models go to location_db.
            """
            if model._meta.app_label == 'location':
                return 'location_db'
            return None
    
        def db_for_write(self, model, **hints):
            """
            Attempts to write auth models go to location_db.
            """
            if model._meta.app_label == 'location':
                return 'location_db'
            return None
    
        def allow_relation(self, obj1, obj2, **hints):
            """
            Allow relations if a model in the events app is involved.
            """
            if obj1._meta.app_label == 'location' or \
               obj2._meta.app_label == 'location':
               return True
            return None
    
        def allow_migrate(self, db, app_label, model_name=None, **hints):
            """
            Make sure the auth app only appears in the 'location_db'
            database.
            """
            if app_label == 'location':
                return db == 'location_db'
            return None
    

    2)这是settings.py
    DATABASE_ROUTERS = ['location.router.LocationRouter']
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
            'OPTIONS': {
                'read_default_file': os.path.join(BASE_DIR, 'my.cnf'),
            },
        },
        'location_db': {
            'ENGINE': 'django.contrib.gis.db.backends.postgis',
            'NAME': 'geo',
            'USER': 'john',
            'PASSWORD': 'toor',
            'HOST': 'localhost',
            'PORT': '5432',
        },
    }
    

    * 我的预测 *

    1)如果我创建另一个项目并且只使用 PostgreSql 那么一切正常,所以所有数据库都可以正常工作

    2) 这是我执行“python manage.py makemigrations 或 migrate”时:
    Operations to perform:
      Apply all migrations: admin, auth, a, contenttypes, location, b, c, d, registration, sessions, sites
    Running migrations:
      No migrations to apply.
    

    * 迁移的结果我认为不应该带有“位置”应用程序,或者可能会出现 .这只是我不知道的预测,但是当我在管理页面上单击“位置”管理模型时,它会运行错误,但当我只使用一个数据库时,它不会运行错误, 我的意思是它搜索仍在 mysql 数据库中的表吗?可能是路由器配置不正确? *

    最佳答案

    下面的代码帮助我解决了这个问题

    python manage.py migrate --run-syncdb
    

    关于python - Django 多个数据库 - 关系不存在;第 1 行 : SELECT COUNT(*) AS "__count" FROM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41652951/

    相关文章:

    django模板日期时间过滤器显示月份而不是分钟

    django - 将来自不同应用程序/对象的模型分组到一个管理 block 中

    java - Python 脚本超时错误 Ambari

    Python - 处理来自 STDIN 的输入而不转换为整数(SPOJ INOUTEST)

    python - 使用 pandas 模块将 excel 单元格值分配给变量 [Python 3.8,Linux]

    python - 如何评估/提高具有不平衡数据集的神经网络预测的准确性?

    python - Django REST 框架未获取 API 端点

    python - 创建对象后将 Id 从 CreateView 传递到另一个函数

    python - 如何在 Django JSONField 中过滤 JSON 数组

    django - 选择一个有效的选项。该选择不是可用的选择之一