如何在Django中使用Python函数扩展SQLite?

aka*_*ola 5 python sqlite django

可以在Python中为SQLite定义新的SQL函数.我怎么能在Django中这样做,以便功能在任何地方都可用?

示例用例是使用GREATEST()和LEAST() PostgreSQL函数的查询,这些函数在SQLite中不可用.我的测试套件运行此查询,我希望能够在运行测试时使用SQLite作为数据库后端.

Vis*_*opu 10

这是一个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)
Run Code Online (Sandbox Code Playgroud)

我只在测试中需要这个,所以我把它放在我的test_settings.py中.如果您在代码中的其他位置使用它,则可能需要对其进行测试connection.vendor == "sqlite".