【问题标题】:How to automatically create postgis database for Django testing?如何为 Django 测试自动创建 postgis 数据库?
【发布时间】:2023-03-28 09:10:01
【问题描述】:

我正在尝试按照Django testing docs 中的信息测试我在 PostGIS 数据库上运行的 Django 应用程序。

通常我通过复制模板来创建一个新数据库:

(作为用户 postgres)

createdb -T template_postgis -O lizard test_geodjango2

当我运行 ./manage.py test 时,我收到以下消息:

正在创建测试数据库... 创建测试数据库时出错:创建数据库的权限被拒绝

如果您想尝试删除测试数据库“test_geodjango2”,请输入“是”,或者输入“否”以 > 取消:

让系统创建数据库的最佳方式是什么?

【问题讨论】:

  • 请在您的 settings.py 文件中包含相关的 DATABASE... 参数。

标签: python django unit-testing


【解决方案1】:

可能是您的DATABASE_USER 没有创建新数据库/架构的权限。


编辑

如果您阅读 Django test 命令的源代码,您会发现它总是会创建一个测试数据库。此外,它还会修改您的设置以引用此测试数据库。

看到这个:http://docs.djangoproject.com/en/dev/topics/testing/#id1

你应该做的是使用fixtures。以下是我们的做法。

  1. 从您的模板数据库中,创建一个“夹具”。使用 manage.py dumpdata 命令创建包含所有模板数据的 JSON 文件。 [提示,--indent=2 选项为您提供可以编辑和修改的可读 JSON。]

  2. 把它放在你的应用程序下的fixtures 目录中。

  3. 在您的TestCase 类定义中引用fixtures 文件。这将在运行测试之前加载夹具。

    class AnimalTestCase(TestCase):
        fixtures = ['mammals.json', 'birds']
        def testFluffyAnimals(self):
             etc.
    

夹具替换您的模板数据库。有了固定装置后,您就不再需要模板了。

【讨论】:

  • 确实如此。但是如果我使用有权限的用户,生成的数据库可能不是 postgis 数据库? (因为我从模板中复制了 postgis 数据库)
【解决方案2】:

正如 S.Lott 提到的,使用标准的 test 命令。

将 geodjango 与 postgis 结合使用,您需要将以下内容添加到您的设置中,以便正确创建空间模板。

settings.py

POSTGIS_SQL_PATH = 'C:\\Program Files\\PostgreSQL\\8.3\\share\\contrib'
TEST_RUNNER='django.contrib.gis.tests.run_tests'

控制台

manage.py test

这里描述: http://geodjango.org/docs/testing.html?highlight=testing#testing-geodjango-apps

我还没有研究它,但是当我这样做时,它会在尝试安装必要的 sql 时提示输入数据库密码。

【讨论】:

    【解决方案3】:

    从 Django 1.11 开始,Django 支持 Postgres-only 设置 settings.DATABASE[whatever]['TEST']['TEMPLATE'],它规定了测试数据库的创建模板:

    https://docs.djangoproject.com/en/dev/ref/settings/#template

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-20
      • 2015-01-28
      • 1970-01-01
      • 2012-04-20
      • 2019-11-24
      • 1970-01-01
      • 2016-05-29
      • 2015-12-15
      相关资源
      最近更新 更多