【问题标题】:Wrong table used when running tests Django Pycharm运行测试 Django Pycharm 时使用了错误的表
【发布时间】:2018-04-20 08:04:01
【问题描述】:

我使用 inspectdb 从与 MySQL Connector/Python 连接的 MySQL 数据库中导入 Models 架构。

当我运行测试时,系统显示:

django.db.utils.ProgrammingError: Table 'test_mydb.cards' doesn't exist

但是表名只是mydb.cards,而不是test_mydb.cards

为什么要添加这个前缀?我的应用名称只是container

【问题讨论】:

  • 当您运行manage.py test 时,它会创建一个全新的数据库(通过在数据库名称前添加test_)以确保测试不会与您的真实数据混淆。但这并不能解释为什么 Django 没有创建正确的表。
  • 有没有办法强制 Django 使用同一个数据库?我已在 MySQL Workbench 中将整个架构设置为只读

标签: python mysql django pycharm mysql-connector-python


【解决方案1】:

我找到了原因:我在每个表的models.py Class Meta 中都有Falsemanaged 属性。我自己从来没有设置过,这是inspectdb之后的默认设置。

请阅读:Django Models Options: Managed

【讨论】:

    【解决方案2】:

    Django 使用unittest 模块进行测试,它还创建了一个空白数据库进行测试,因为理想情况下测试应该始终在相同的空白数据库或夹具填充数据库上运行。

    Tests 需要数据库(即模型测试)将不会使用您的 “真实”(生产)数据库。创建单独的空白数据库 用于测试。

    无论测试通过还是失败,测试数据库都是 执行完所有测试后销毁。

    检查您是否对测试尝试访问的表进行了迁移排序,因为如果没有猴子补丁或解决方法,测试套件将无法访问所有没有迁移的表

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 2014-01-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-03
      相关资源
      最近更新 更多