test_database() 不使用给定的数据库

test_database() does not use the database given

我正在尝试使用 peewee 的 test_database 测试我的模型,它应该使用在上下文块中执行 SQL 时传递的数据库。然而 运行 测试时,我注意到生产数据库总是被使用,这不应该是这样的。

这是我得到的异常:

======================================================================
ERROR: test_Admin (__main__.DatabaseTestSuite)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "db/db_test.py", line 14, in test_Admin
    with test_database(test_db, (Admin), create_tables=True):
  File "/usr/local/lib/python2.7/dist-packages/playhouse/test_utils.py", line 21, in __enter__
    for m in self.models:
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 4723, in __iter__
    return iter(self.select())
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 3149, in __iter__
    return iter(self.execute())
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 3142, in execute
    self._qr = ResultWrapper(model_class, self._execute(), query_meta)
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 2826, in _execute
    return self.database.execute_sql(sql, params, self.require_commit)
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 3683, in execute_sql
    self.commit()
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 3507, in __exit__
    reraise(new_type, new_type(*exc_args), traceback)
  File "/usr/local/lib/python2.7/dist-packages/peewee.py", line 3676, in execute_sql
    cursor.execute(sql, params or ())
  File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 166, in execute
    result = self._query(query)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/cursors.py", line 322, in _query
    conn.query(q)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 835, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1019, in _read_query_result
    result.read()
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 1302, in read
    first_packet = self.connection._read_packet()
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 981, in _read_packet
    packet.check_error()
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 393, in check_error
    err.raise_mysql_exception(self._data)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 107, in raise_mysql_exception
    raise errorclass(errno, errval)
ProgrammingError: (1146, u"Table 'db.admin' doesn't exist")

----------------------------------------------------------------------

测试代码如下:

from db import *
import unittest
from playhouse.test_utils import test_database


test_db = MySQLDatabase('testdb', 
    user='testuser', 
    password='testpass')


class DatabaseTestSuite(unittest.TestCase):

    def test_Admin(self):
        with test_database(test_db, (Admin), create_tables=True):

            Admin.create(username="testuser", 
                email="testuser@email.com")

            result = Admin.select().where(Admin.user == "testuser")

            unittest.assertIsNotNone(result)


if __name__ == '__main__':
    unittest.main()

我已经在 github 页面上打开了一个问题,但到目前为止没有收到任何帮助。您可以找到问题 here。如果需要,它应该提供额外的细节。任何帮助将不胜感激,谢谢。

模型元组只有一个项目,因此需要尾随逗号。改变这个

with test_database(test_db, (Admin), create_tables=True):

到这个

with test_database(test_db, (Admin,), create_tables=True):

已解决。