【问题标题】:Django can't destroy and create test databases properlyDjango 无法正确销毁和创建测试数据库
【发布时间】:2014-12-15 18:34:52
【问题描述】:

当我尝试运行我的单元测试时,这是我得到的:

python manage.py test dbank --settings=databank_web.settings.dqs.dev_hooman
Creating test database for alias 'default'...
Creating test database for alias 'global'...
Creating test database for alias 'optin_db'...
Creating test database for alias 'vpd3'...
Creating test database for alias 'user_db'...
Creating test database for alias 'vpd1'...
Creating test database for alias 'vpd2'...
.
----------------------------------------------------------------------
Ran 1 test in 0.327s

OK
Destroying test database for alias 'default'...
Warning: Table 'mysql.proc' doesn't exist

它无法破坏数据库。当我重新运行测试时,它会变得更好:

python manage.py test dbank --settings=databank_web.settings.dqs.dev_hooman
Creating test database for alias 'default'...
Creating test database for alias 'global'...
Got an error creating the test database: (1007, "Can't create database 'test_dqs12_full2'; database exists")
Type 'yes' if you would like to try deleting the test database 'test_dqs12_full2', or 'no' to cancel: yes
Destroying old test database 'global'...
Got an error recreating the test database: Table 'mysql.proc' doesn't exist

知道为什么会出错吗?

运行最新的自制软件 + mysql-5.6.21 + Django 1.5.5

【问题讨论】:

  • INSTALLED_APPS 中有 south 吗?
  • 是的,我在INSTALLED_APPS 中有south
  • SOUTH_TESTS_MIGRATE设置更改/设置为False有帮助吗?

标签: python mysql django django-unittest


【解决方案1】:

我终于找到原因了。

我们的应用程序有大约 7 个数据库。当我要手动删除它们以获得干净的状态时,我不小心也删除了mysql 数据库。永远不要删除此数据库,因为它包含有关 root 用户的重要信息。

当我意识到这一点时,我尝试通过 brew 重新安装 MySQL 来缓解。

brew uninstall mysql
brew install mysql

这很有效,当我运行 show databases; 时,mysql 数据库再次出现,但问题仍然存在。那是我来这里寻求帮助的时候。

看起来事情比 brew 更复杂一些。 这就是我让它再次工作的方式:

1) brew uninstall mysql
2) sudo rm -r /usr/local/var/mysql/
3) brew install mysql
4) unset TMPDIR
5) mysql_install_db --verbose --user='whoami' --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
6) mysql.server restart
7) mysql_secure_installation

现在可以了。希望这对其他 Mac 用户有所帮助。谢谢。

【讨论】:

    【解决方案2】:

    嗯,有两个错误表明mysql.proc 表丢失。您也许可以在运行mysql_update 时生成它。

    【讨论】:

    • 我没有否决您的回答。我也不确定运行mysql_update 是什么意思。谢谢
    猜你喜欢
    • 2013-08-05
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2016-12-24
    • 2019-03-26
    • 1970-01-01
    • 2016-01-23
    • 2016-09-06
    相关资源
    最近更新 更多