解决 SQLite 缺少命名参数支持的问题
Working around SQLite's lack of named parameter support
Django 关于 objects.raw() 的文档说明了以下关于使用命名参数的内容:
Dictionary params are not supported with the SQLite backend; with this backend, you must pass parameters as a list.
我在我们的代码库中 运行 进行单元测试时使用 SQLite,因为与我们的真实数据库后端相比,它快得离谱。但是因为它似乎不支持命名参数,所以我无法为依赖于它们的某个功能编写测试。
是否有一种简洁的通用方法来解决此限制?就像在不诉诸可能将代码暴露给 SQL 注入的黑客攻击?
I use SQLite when running unit tests in our codebase because it's
ridiculously fast in comparison to our real database backend.
理想情况下,应该针对同一个数据库执行单元测试。 sqlite 缺少许多功能(正如您所发现的)。如果您编写测试代码以使用 sqlite,您可能最终会编写函数代码以使用它,这意味着您的真实数据库中的某些功能已经变得多余。
您可以使用 keep option to manage.py 更快地针对 mysql 或 postgresql 运行 进行测试。所以真的没有必要用sqlite来测试。
Is there a clean generic way to work around this limitation? As in,
without resorting to hacks that could expose code to SQL injection?
没有。我会说使用 sqlite 而不是你的真实数据库是一个黑客开始。
Django 关于 objects.raw() 的文档说明了以下关于使用命名参数的内容:
Dictionary params are not supported with the SQLite backend; with this backend, you must pass parameters as a list.
我在我们的代码库中 运行 进行单元测试时使用 SQLite,因为与我们的真实数据库后端相比,它快得离谱。但是因为它似乎不支持命名参数,所以我无法为依赖于它们的某个功能编写测试。
是否有一种简洁的通用方法来解决此限制?就像在不诉诸可能将代码暴露给 SQL 注入的黑客攻击?
I use SQLite when running unit tests in our codebase because it's ridiculously fast in comparison to our real database backend.
理想情况下,应该针对同一个数据库执行单元测试。 sqlite 缺少许多功能(正如您所发现的)。如果您编写测试代码以使用 sqlite,您可能最终会编写函数代码以使用它,这意味着您的真实数据库中的某些功能已经变得多余。
您可以使用 keep option to manage.py 更快地针对 mysql 或 postgresql 运行 进行测试。所以真的没有必要用sqlite来测试。
Is there a clean generic way to work around this limitation? As in, without resorting to hacks that could expose code to SQL injection?
没有。我会说使用 sqlite 而不是你的真实数据库是一个黑客开始。