Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django数据库:测试数据库的问题_Python_Django - Fatal编程技术网

Python Django数据库:测试数据库的问题

Python Django数据库:测试数据库的问题,python,django,Python,Django,我正在学习Django测试。 我用一个简单的模型编写了一个简单的应用程序,并希望运行测试来检查模型方法的有效性,但在运行测试时收到一条错误消息: 这是models.py from django.db import models class Trip(models.Model): origin = models.CharField(max_length=20) destination = models.CharField(max_length=20) def __st

我正在学习Django测试。 我用一个简单的模型编写了一个简单的应用程序,并希望运行测试来检查模型方法的有效性,但在运行测试时收到一条错误消息:

这是models.py

from django.db import models


class Trip(models.Model):
    origin = models.CharField(max_length=20)
    destination = models.CharField(max_length=20)

    def __str__(self):
        return self.origin

    def is_valid(self):
        return self.origin != self.destination

这是test.py

from django.test import TestCase
from .models import Trip


# Create your tests here.
class TripModelTests(TestCase):

    def test_trip(self):
        a = Trip.objects.create(origin='a', destination='a')
        self.assertIs(a.is_valid(), True)
这里是settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'd57r9kcrhthdc7',
        'USER': 'sdqxaruartlvrd',
        'PASSWORD': 'e7b8f85611596ed125fe3ed4ea590f821f65e317c17ee7871be75b8130d72378',
        'HOST': 'ec2-3-214-46-194.compute-1.amazonaws.com',
        'PORT': '5432',
        'TEST': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        }
    }
}
下面是我在运行python manage.py测试传输时收到的错误消息

Creating test database for alias 'default'...
Traceback (most recent call last):
  File "manage.py", line 22, in <module>
    main()
  File "manage.py", line 18, in main
    execute_from_command_line(sys.argv)
  File "C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\management\__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\management\__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\management\commands\test.py", line 23, in run_from_argv
    super().run_from_argv(argv)
  File "C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\management\base.py", line 330, in run_from_argv
    self.execute(*args, **cmd_options)
  File "C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\management\base.py", line 371, in execute
    output = self.handle(*args, **options)
  File "C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\core\management\commands\test.py", line 53, in handle
    failures = test_runner.run_tests(test_labels)
  File "C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\test\runner.py", line 695, in run_tests
    old_config = self.setup_databases(aliases=databases)
  File "C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\test\runner.py", line 614, in setup_databases
    return _setup_databases(
  File "C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\test\utils.py", line 170, in setup_databases
    connection.creation.create_test_db(
  File "C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\backends\base\creation.py", line 55, in create_test_db
    self._create_test_db(verbosity, autoclobber, keepdb)
  File "C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\backends\base\creation.py", line 172, in _create_test_db
    'dbname': self.connection.ops.quote_name(test_database_name),
  File "C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site-packages\django\db\backends\postgresql\operations.py", line 113, in quote_name
    if name.startswith('"') and name.endswith('"'):
AttributeError: 'WindowsPath' object has no attribute 'startswith'
正在为别名“default”创建测试数据库。。。
回溯(最近一次呼叫最后一次):
文件“manage.py”,第22行,在
main()
文件“manage.py”,第18行,主
从命令行(sys.argv)执行命令
文件“C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site packages\django\core\management\\uuuuuuu init\uuuuuu.py”,第401行,从命令行执行
utility.execute()
文件“C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site packages\django\core\management\\ uuuuuu init\uuuuuu.py”,第395行,在execute中
self.fetch_命令(子命令)。从_argv(self.argv)运行_
文件“C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site packages\django\core\management\commands\test.py”,第23行,从\u argv运行
super()。从_argv(argv)运行_
文件“C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site packages\django\core\management\base.py”,第330行,运行于\u argv
self.execute(*args,**cmd_选项)
文件“C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site packages\django\core\management\base.py”,第371行,在execute中
输出=self.handle(*args,**选项)
文件“C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site packages\django\core\management\commands\test.py”,第53行,位于句柄中
失败=测试运行程序。运行测试(测试标签)
运行测试中第695行的文件“C:\Users\fabia\AppData\Local\Programs\Python 38-32\lib\site packages\django\test\runner.py”
old_config=self.setup_数据库(别名=数据库)
文件“C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site packages\django\test\runner.py”,第614行,位于安装程序数据库中
返回\u设置\u数据库(
文件“C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site packages\django\test\utils.py”,第170行,在setup\u数据库中
connection.creation.create_test_db(
文件“C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site packages\django\db\backends\base\creation.py”,第55行,在create\u test\u db中
self.\u创建\u测试\u数据库(冗余、自动浏览、keepdb)
文件“C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site packages\django\db\backends\base\creation.py”,第172行,位于\u create\u test\u db中
'dbname':self.connection.ops.quote\u name(test\u database\u name),
文件“C:\Users\fabia\AppData\Local\Programs\Python\Python38-32\lib\site packages\django\db\backends\postgresql\operations.py”,第113行,引号\u
如果name.startswith(“”)和name.endswith(““”):
AttributeError:“WindowsPath”对象没有属性“StartWith”

如果我只使用默认的django设置并使用sqlite数据库,测试就可以正常工作。…

错误可能是由于
基本目录路径造成的,在
设置.py
中,您需要删除斜杠
/
,并将其切换到以下位置

'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
您可能需要根据
BASE\u DIR
内容验证它是否指向正确的位置。调试这一点的一种方法是在数据库命令之后设置
ipdb()
,这样一旦使用
python manage.py runserver
,就可以轻松地检查
数据库的结构

import ipdb; ipdb.set_trace()
来源: