Django测试django.db.utils.ProgrammingError:(1146,“表'DB.Table'不存在”)

时间:2018-07-08 00:43:40

标签: mysql django rest unit-testing django-rest-framework

我正在Django中运行一个简单的测试用例,我有一个模型订户,但是当我运行python manage.py test时 它给了我以下错误

Creating test database for alias 'default'...
System check identified no issues (0 silenced).
E
======================================================================
ERROR: test_subscriber_fullname 
(gatpulsecore.tests.test_models.SubscribersTest)
Test method get_fullname
----------------------------------------------------------------------
Traceback (most recent call last):
  File "C:\Users\dania\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\backends\utils.py", line 85, in _execute
    return self.cursor.execute(sql, params)
  File "C:\Users\dania\AppData\Local\Programs\Python\Python36\lib\site-packages\django\db\backends\mysql\base.py", line 71, in execute
    return self.cursor.execute(query, args)
  File "C:\Users\dania\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\cursors.py", line 170, in execute
    result = self._query(query)
  File "C:\Users\dania\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\cursors.py", line 328, in _query
    conn.query(q)
  File "C:\Users\dania\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\connections.py", line 516, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "C:\Users\dania\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\connections.py", line 727, in _read_query_result
    result.read()
  File "C:\Users\dania\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\connections.py", line 1066, in read
    first_packet = self.connection._read_packet()
  File "C:\Users\dania\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\connections.py", line 683, in _read_packet
    packet.check_error()
  File "C:\Users\dania\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\protocol.py", line 220, in check_error
    err.raise_mysql_exception(self._data)
  File "C:\Users\dania\AppData\Local\Programs\Python\Python36\lib\site-packages\pymysql\err.py", line 109, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.ProgrammingError: (1146, "Table 'test_gatpulsedevinstance.subscribers' doesn't exist")

我的模特看起来像这样

from django.db import models

class Subscribers(models.Model):
    """ Subscriber Model """   
    idsubscribers = models.AutoField(primary_key=True)
    legalid = models.CharField(max_length=45, blank=True, null=True)
    name = models.CharField(max_length=45, blank=True, null=True)
    lastname = models.CharField(max_length=45, blank=True, null=True)
    initialdate = models.DateField(blank=True, null=True)
    bday = models.DateField(blank=True, null=True)
    email = models.CharField(max_length=100, blank=True, null=True)
    phone = models.CharField(max_length=45, blank=True, null=True)
    emergencyphone = models.CharField(max_length=45, blank=True, null=True)
    photolink = models.CharField(max_length=200, blank=True, null=True)
    medicalconditions = models.CharField(max_length=200, blank=True, null=True)
    objectives = models.CharField(max_length=200, blank=True, null=True)
    paymentfrequency = models.CharField(max_length=45, blank=True, null=True)

    def get_fullname(self):
        return self.name + " " + self.lastname
    class Meta:
        managed = False
        db_table = 'subscribers'

我的测试文件

from django.test import TransactionTestCase
from gatpulsecore.models import Subscribers

class SubscribersTest(TransactionTestCase):
    """ Test module for Subscribers model """

    def setUp(self):
        Subscribers.objects.create(
            legalid='34214555', name='Casper', lastname='Smith')
        Subscribers.objects.create(
            legalid='24612555', name='John', lastname='Rogers')

    def test_subscriber_fullname(self):
        """ Test method get_fullname """
        sub_casper = Subscribers.objects.get(name='Casper')
        sub_john = Subscribers.objects.get(name='John')
        self.assertEqual(
            sub_casper.get_fullname(), "Casper Smith")
        self.assertEqual(
            sub_john.get_fullname(), "John Rogers")

我已经尝试了迁移,但是没有帮助,也有人建议使用TransactionTestCase而不是TestCase,但是它也不起作用。 是否有人遇到过相同的错误?我一直在寻找解决方法,但似乎找不到任何有用的方法。

1 个答案:

答案 0 :(得分:0)

如果您使用多个数据库,则可能会发生这种情况,在这种情况下,您必须使用以下命令指定数据库:

MyModel.objects.using("database_name")

或者只是将特定数据库指定为主数据库。

据我了解,django无法检测到您的数据库或您有多个数据库。