【发布时间】:2011-11-29 07:29:14
【问题描述】:
可以define new SQL functions for SQLite in Python。如何在 Django 中做到这一点,以便函数随处可用?
一个示例用例是使用GREATEST() and LEAST() PostgreSQL 函数的查询,这些函数在 SQLite 中不可用。我的测试套件运行这个查询,我希望在运行测试时能够使用 SQLite 作为数据库后端。
【问题讨论】:
可以define new SQL functions for SQLite in Python。如何在 Django 中做到这一点,以便函数随处可用?
一个示例用例是使用GREATEST() and LEAST() PostgreSQL 函数的查询,这些函数在 SQLite 中不可用。我的测试套件运行这个查询,我希望在运行测试时能够使用 SQLite 作为数据库后端。
【问题讨论】:
这是一个 Django 代码示例,它通过调用 Python 的内置 max() 和 min() 使用 GREATEST() 和 LEAST() 方法扩展 SQLite:
from django.db.backends.signals import connection_created
from django.dispatch import receiver
@receiver(connection_created)
def extend_sqlite(connection=None, **kwargs):
connection.connection.create_function("least", 2, min)
connection.connection.create_function("greatest", 2, max)
我只在测试中需要这个,所以我把它放在我的 test_settings.py 中。如果您在代码的其他地方有它,您可能需要测试 connection.vendor == "sqlite"。
【讨论】: