This decorator will replace a method on a model with a class method that executes SQL in the functions doc string.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | def SQL(*keys):
def _SQL(func):
def _sqlfunc(cls, *args):
from django.db import connection
cursor = connection.cursor()
cursor.execute(func.__doc__, args)
rv = cursor.fetchall()
if keys:
rv = [dict(zip(keys, i)) for i in rv]
return rv
return classmethod(_sqlfunc)
return _SQL
#EXAMPLE
@SQL('foo', 'bar', 'baz')
def foo(cls):
'''SELECT foo, AVG(bar) AS bar, AVG(baz) AS baz
FROM foos
WHERE quuux=%s
GROUP BY foo
ORDER BY foo'''
#INVOCATION
Foo.foo(1)
|
More like this
- find even number by Rajeev529 2 months, 3 weeks ago
- Form field with fixed value by roam 3 months, 2 weeks ago
- New Snippet! by Antoliny0919 3 months, 3 weeks ago
- Add Toggle Switch Widget to Django Forms by OgliariNatan 6 months, 2 weeks ago
- get_object_or_none by azwdevops 10 months ago
Comments
It is no good solution to provide semantic code in the doc string. It exists only for documentation.
But maybe you can return the SQL query as a string from the foo function.
#
Please login first before commenting.