2011-11-29 9 views
5

E 'possibile define new SQL functions for SQLite in Python. Come posso farlo in Django in modo che le funzioni siano disponibili ovunque?Come estendere SQLite con le funzioni Python in Django?

Un caso di utilizzo di esempio è una query che utilizza le funzioni PostgreSQL GREATEST() and LEAST(), che non sono disponibili in SQLite. La mia suite di test esegue questa query e mi piacerebbe poter utilizzare SQLite come back-end del database durante l'esecuzione dei test.

risposta

10

Ecco un esempio di codice di Django che si estende SQLite con GREATEST() e meno() metodi chiamando di Python incorporato max() e min():

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) 

Ho solo bisogno di questo nelle prove, così ho messo questo nel mio test_settings.py. Se lo hai altrove nel tuo codice, potrebbe essere necessario testare tale connection.vendor == "sqlite".

+0

Grazie mille !! –

Problemi correlati