NEW: __in lookup
This commit is contained in:
3
setup.py
3
setup.py
@@ -1,6 +1,7 @@
|
||||
# encoding: utf-8
|
||||
from distutils.core import setup
|
||||
from setuptools import find_packages
|
||||
import sqlquerybuilder
|
||||
|
||||
setup(
|
||||
name='sqlquerybuilder',
|
||||
@@ -8,6 +9,7 @@ setup(
|
||||
author='José Sánchez Moreno',
|
||||
author_email='jose@o2w.es',
|
||||
packages=find_packages(),
|
||||
test_suite="tests",
|
||||
license='MIT',
|
||||
description=u'SQL Query Builder inspired on django ORM Syntax',
|
||||
long_description=open('README.rst').read(),
|
||||
@@ -22,6 +24,7 @@ setup(
|
||||
'Operating System :: Microsoft :: Windows',
|
||||
'Operating System :: POSIX',
|
||||
'Programming Language :: Python',
|
||||
'Programming Language :: SQL',
|
||||
],
|
||||
|
||||
)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import datetime
|
||||
import copy
|
||||
import collections
|
||||
|
||||
VERSION = "0.0.3"
|
||||
|
||||
@@ -76,10 +77,9 @@ class F(object):
|
||||
|
||||
class Q(QMixin):
|
||||
lookup_types = [
|
||||
'iexact', 'contains', 'icontains',
|
||||
'startswith', 'istartswith', 'endswith', 'iendswith', 'year',
|
||||
'month', 'day', 'week_day', 'hour', 'minute', 'second',
|
||||
'isnull', 'search', 'regex', 'iregex']
|
||||
'icontains', 'istartswith', 'iendswith',
|
||||
'year', 'month', 'day', 'week_day', 'hour', 'minute', 'second',
|
||||
'isnull', 'in']
|
||||
|
||||
op_map = {
|
||||
'lte': '<=',
|
||||
@@ -101,7 +101,7 @@ class Q(QMixin):
|
||||
|
||||
def _get_value(self, value):
|
||||
if isinstance(value, int) or isinstance(value, float):
|
||||
return value
|
||||
return str(value)
|
||||
|
||||
if isinstance(value, datetime.datetime):
|
||||
return "'%s'" % value.strftime("%Y-%m-%d %H:%M:%S")
|
||||
@@ -109,6 +109,9 @@ class Q(QMixin):
|
||||
if isinstance(value, datetime.date):
|
||||
return "'%s'" % value.strftime("%Y-%m-%d")
|
||||
|
||||
if isinstance(value, list) or isinstance(value, set):
|
||||
return ", ".join([self._get_value(item) for item in value])
|
||||
|
||||
if isinstance(value, F):
|
||||
return value
|
||||
|
||||
@@ -132,6 +135,9 @@ class Q(QMixin):
|
||||
if lookup == "istartwith":
|
||||
return "{0} like '{1}%'".format(column, value)
|
||||
|
||||
if lookup == "in" and value:
|
||||
return "{0} in ({1})".format(column, self._get_value(value))
|
||||
|
||||
if lookup == 'isnull':
|
||||
op = ""
|
||||
if not value:
|
||||
|
||||
@@ -61,5 +61,17 @@ class TestSqlBuilder(unittest.TestCase):
|
||||
self.assertEqual(
|
||||
str(sql), "SELECT name, date, tlf , count(*) as total FROM users WHERE ((name='jhon') AND NOT (DATEPART('year', date)<=1977))")
|
||||
|
||||
def test_in(self,):
|
||||
sql = Queryset("users")
|
||||
sql = sql.filter(name__in=["jose", "andres"])
|
||||
self.assertEqual(
|
||||
str(sql), "SELECT * FROM users WHERE (name in ('jose', 'andres'))")
|
||||
|
||||
sql = Queryset("users")
|
||||
sql = sql.filter(year__in=[2012, 2014, "jose"])
|
||||
self.assertEqual(
|
||||
str(sql), "SELECT * FROM users WHERE (year in (2012, 2014, 'jose'))")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Reference in New Issue
Block a user