【问题标题】:"Conflicting models in application..." with external database tables“应用程序中的冲突模型......”与外部数据库表
【发布时间】:2016-04-09 19:16:47
【问题描述】:

我有一个项目,其中包含许多应用程序,这些应用程序既可以访问具有 100 个表的本地 MySQL 数据库,也可以访问具有更多表的多个外部 MySQL 和 Ms-SQL Server 数据库。所有外部表都使用“managed=False”元数据在模型中定义。

我最近按照 StackOveflow 的发行说明和其他提示等中的说明将 Django 从 1.6 升级到 1.7。

除了我所有访问远程数据库表的应用程序之外,一切似乎都恢复了。这是一个示例消息:

RuntimeError: Conflicting 'bugview_deferred_description_disposition_divisioaf59cb28117de5eb6ddfea0476dab601' models in application 'nvbugsdw': <class 'bug_metrics.models_bugs.BugView_Deferred_Description_Disposition_Divisioaf59cb28117de5eb6ddfea0476dab601'> and <class 'bug_metrics.models_bugs.BugView_Deferred_Description_Disposition_Divisioaf59cb28117de5eb6ddfea0476dab601'>.

表BugView在一个文件名models_bugs.py中定义如下:

class BugView(models.Model):
BugId            = models.BigIntegerField(primary_key=True)
Module           = models.CharField(max_length=128, null=False)
Requester        = models.CharField(max_length=128, null=False)
QAEngineer       = models.CharField(max_length=128, null=False)
Engineer         = models.CharField(max_length=128, null=False)
RequestDate      = models.DateTimeField(null=False)
ModifiedDate     = models.DateTimeField(null=False)
Priority         = models.CharField(max_length=50, null=False)
Severity         = models.CharField(max_length=50, null=False)
Disposition      = models.CharField(max_length=64, null=False)
BugAction        = models.CharField(max_length=64, null=False)
Origin           = models.CharField(max_length=64, null=False)
GeographicOrigin = models.CharField(max_length=128, null=False)
Division         = models.CharField(max_length=64, null=False)
Synopsis         = models.CharField(max_length=256, null=False)
Description      = models.CharField(max_length=1024, null=False)
BugType          = models.CharField(max_length=50, null=False)
OriginalBugId    = models.BigIntegerField()

class Meta:
    app_label = 'nvbugsdw'
    managed   = False
    db_table  = 'bugview'

在 views.py 文件中,类的导入方式如下:

from .models_bugs import BugView

我也试过

from models_bugs import BugView
from bug_metrics.models_bugs import BugView

“bug_metrics”是应用名称。

我按照之前在https://code.djangoproject.com/ticket/22280 上发布的所有建议都没有效果。

我在这一点上不知所措。有什么建议吗?

另外,这可能不相关,但是在尝试调试此问题时(通过将 sys.path 转储到 manage.py 中),我注意到在运行命令时 manage.py 中的代码执行了两次

./manage.py runserver --nothreading 0.0.0.0:8081

我的 sys.path 是:

/opt/graphic_tools/gtools
/usr/local/lib/python2.7/dist-packages/South-0.8.4-py2.7.egg
/usr/lib/python2.7
/usr/lib/python2.7/plat-linux2
/usr/lib/python2.7/lib-tk
/usr/lib/python2.7/lib-old
/usr/lib/python2.7/lib-dynload
/usr/local/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages
/usr/lib/python2.7/dist-packages/PIL
/usr/lib/python2.7/dist-packages/gst-0.10
/usr/lib/python2.7/dist-packages/gtk-2.0
/usr/lib/pymodules/python2.7
/usr/lib/python2.7/dist-packages/ubuntu-sso-client
/usr/lib/python2.7/dist-packages/ubuntuone-client
/usr/lib/python2.7/dist-packages/ubuntuone-control-panel
/usr/lib/python2.7/dist-packages/ubuntuone-couch
/usr/lib/python2.7/dist-packages/ubuntuone-installer
/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol

"/opt/graphic_tools/gtools" 是我的项目目录。它不包含 init.py 文件,但包含所有应用程序子目录,包括“gtools”子目录。

【问题讨论】:

    标签: django models


    【解决方案1】:

    一个建议。升级到新版本的 Django 后,您是否尝试过同步您的“远程”数据库?也许它们没有同步?

    我假设你有类似的东西: 数据库 = {

    '默认':{一些凭据},

    'remote_db_name1':{一些凭据},

    'remote_db_name2':{一些凭据}, ...

    }

    你可以跑

    ./manage.py migrate --database=remote_db_name1

    ./manage.py migrate --database=remote_db_name2

    等等。 (另外,我假设您之前为您的应用运行过“makemigrations”。)

    原因是默认情况下 migrate 在“默认”数据库上运行,因此可以跳过其他数据库。

    【讨论】:

    • 我确实在本地数据库上运行了迁移。
    • 我没有在远程的,因为它们是远程的,不是由 Django 管理的。
    • 当我运行 ./manage.py migrate --database= 我得到
    • 'NotImplementedError: BaseDatabaseWrapper 的子类可能需要 schema_editor() 方法',我现在似乎遇到了这个问题:bugs.mysql.com/bug.php?id=72542?
    • 好的,想出了如何解决它。这听起来真的很愚蠢。我通过运行从 1.6 升级到 1.7: sudo pip install django 1.7 它加载了 Django 1.7.0。当我实际使用时: sudo pip install django=="1.7.11" 1.7.11 已安装并且问题消失了。所以这个问题必须在 1.7.0 和 1.7.11 之间的版本中得到解决。这是在这里找到的:github.com/lionheart/django-pyodbc/issues/52
    【解决方案2】:

    因此,在我的特定情况下,问题是由运行旧版本的 Django 引起的。我以为我安装了 1.7.11 但实际上安装了 1.7.0。当我安装 1.7.11 后,问题就消失了。

    错误的方式:

    sudo pip install django=="1.7"
    

    正确方法:

    sudo pip install django=="1.7.11"
    

    【讨论】:

      猜你喜欢
      • 2018-01-01
      • 2022-01-22
      • 2017-01-24
      • 2016-09-13
      • 1970-01-01
      • 1970-01-01
      • 2014-03-19
      • 1970-01-01
      • 2021-06-19
      相关资源
      最近更新 更多