Skip to main content

Django app that lets you define custom SQL functions

Project description

PyPI version fury.io GitHub release

Django SQL Fun

Django SQLFun allows you to define and manage custom SQL functions in code. When you change the function definitions and call makemigrations, it will generate migrations for any functions that have been added, removed, or changed. These function classes can also be used in Django querysets since the SqlFun class inherits from django.db.models.expressions.Func.

Note: I'm still developing this so there may be some rough edges. Breaking changes may happen.

Installation and Use

  1. Install using your favorite python package manager, eg. pip install django-sqlfun.
  2. Add sqlfun to INSTALLED_APPS in your django settings.
  3. Define a custom function in a module that gets imported on project load (eg. models.py). See below for example, or the test_project.
  4. Run manage.py makemigrations and then manage.py migrate.

Example

Define a custom function in your models.py:

# models.py
from sqlfun import SqlFun
from django.db.models import IntegerField

class BadSum(SqlFun):
    """Almost returns the sum of two numbers."""
    
    app_label = 'test_project' # [optional] if omitted, sqlfun will atempt to auto-resolve it
    sql = """
        CREATE OR REPLACE FUNCTION bad_sum(
            first integer,
            second integer
        ) RETURNS integer as $$
        SELECT first + second + 1;
        $$
        LANGUAGE sql
        stable;
    """
    output_field = IntegerField()

Then run manage.py makemigrations and manage.py migrate and you should be good to go. You can use it in SQL: SELECT bad_sum(2, 2), or in a Python queryset like so: MyModel.objects.annotate(foo=BadSum(Value(2), Value(2))).

Notes

  • SQL functions are normalized, so changes in white-space should not result in changes being detected
  • the --dry-run and --name options of makemigrations are respected

Credits

This project is inspired by two great projects: django-pgtrigger and django-pgviews.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-sqlfun-0.0.2.tar.gz (15.6 kB view details)

Uploaded Source

Built Distribution

django_sqlfun-0.0.2-py3-none-any.whl (9.6 kB view details)

Uploaded Python 3

File details

Details for the file django-sqlfun-0.0.2.tar.gz.

File metadata

  • Download URL: django-sqlfun-0.0.2.tar.gz
  • Upload date:
  • Size: 15.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.4.3 CPython/3.9.16

File hashes

Hashes for django-sqlfun-0.0.2.tar.gz
Algorithm Hash digest
SHA256 1bbfb8a0883e489b91d043b0fb348b60809a0d58532851bed6115788e555b897
MD5 ef39a77b2eec4de27a12aac500c13208
BLAKE2b-256 bb0ff5ad19f25357f0049a8cb32159b418e7ee9028d9e64925dca4e63998203a

See more details on using hashes here.

File details

Details for the file django_sqlfun-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: django_sqlfun-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 9.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: pdm/2.4.3 CPython/3.9.16

File hashes

Hashes for django_sqlfun-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 709ec06f6604fe9f9df2b8f6ba16ec317a39ee0fd967c932a08774f462ac128f
MD5 8f1953a61eff61c985031b66539e7ad6
BLAKE2b-256 2176a85e140ba868bd50840c1ae0456cf95bfd34e9e65753d5abcf95a807f576

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page