python - Django psycopg2.InterfaceError : connection already closed

标签 python django

单元测试开始崩溃,并出现django.db.utils.InterfaceError:连接已关闭。当我切换到 Postgres 后。我在 https://www.djangoproject.com/ 找到了一些解决方案页面,但没有帮助。 .

Python 3.6 Django 3.0.7 Postgres 10.12

测试用例:

class TestLogin(TestCase):
    def setUp(self):
        self.client = RequestsClient()
        self.url = HOST + '/api/token/'
        self.headers = {}
        self.user = User.objects.create_user(**random_user)

    def test_login_correct(self):
        try:
            r = self.client.post(self.url, data={
                'email': random_user['email'],
                'password': random_user['password']
            }).json()

        except JSONDecodeError:
            self.fail("/api/token endpoint for POST request not implemented correctly")

        self.assertTrue('access' in r)
        self.assertTrue('refresh' in r)

追踪:

Traceback (most recent call last):
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\backends\base\base.py", line 238, in _cursor
    return self._prepare_cursor(self.create_cursor(name))
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\utils\asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\backends\postgresql\base.py", line 231, in create_cursor
    cursor = self.connection.cursor()
psycopg2.InterfaceError: connection already closed

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "E:\Work\FarmerRest\accounts\tests\tests.py", line 141, in setUp
    self.user = User.objects.create_user(**random_user)
  File "E:\Work\FarmerRest\accounts\models.py", line 33, in create_user
    **extra_fields)
  File "E:\Work\FarmerRest\accounts\models.py", line 28, in _create_user
    user.save(using=self._db)
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\contrib\auth\base_user.py", line 66, in save
    super().save(*args, **kwargs)
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\models\base.py", line 746, in save
    force_update=force_update, update_fields=update_fields)
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\models\base.py", line 784, in save_base
    force_update, using, update_fields,
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\models\base.py", line 887, in _save_table
    results = self._do_insert(cls._base_manager, using, fields, returning_fields, raw)
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\models\base.py", line 926, in _do_insert
    using=using, raw=raw,
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\models\manager.py", line 82, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\models\query.py", line 1204, in _insert
    return query.get_compiler(using=using).execute_sql(returning_fields)
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\models\sql\compiler.py", line 1390, in execute_sql
    with self.connection.cursor() as cursor:
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\utils\asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\backends\base\base.py", line 260, in cursor
    return self._cursor()
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\backends\base\base.py", line 238, in _cursor
    return self._prepare_cursor(self.create_cursor(name))
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\backends\base\base.py", line 238, in _cursor
    return self._prepare_cursor(self.create_cursor(name))
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\utils\asyncio.py", line 26, in inner
    return func(*args, **kwargs)
  File "E:\Work\FarmerRest\venv\lib\site-packages\django\db\backends\postgresql\base.py", line 231, in create_cursor
    cursor = self.connection.cursor()
django.db.utils.InterfaceError: connection already closed

最佳答案

原因可能是您使用的是 TestCase 而不是 TransactionTestCase。一旦您使用异步代码,这种情况就会很常见,从您的回溯来看似乎就是这种情况。

关于python - Django psycopg2.InterfaceError : connection already closed,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62996020/

相关文章:

java - 稀疏数据的离散和连续分类器

python - 从 Django Rest 框架序列化器中查找模型名称

python - 无法在 AWS Cloud9 IDE 中使用 Python 访问本地环境变量

Python检查一个项目是否在列表中

django - 如何设置Django对象实例权限?

python - 如何将定义为 (Entry.get()) 的变量从一个函数传递到另一个函数?

python - 使用 Pytest 和 Mock 测试查询数据库的 View

python - Django 中的 ForeignKey 形式限制

django - Windows 7中的uwsgi安装错误

python - django.core.exceptions.AppRegistryNotReady : Apps aren't loaded yet. (django 2.0.1)(Python 3.6)