python3 compatible
This commit is contained in:
@@ -1,14 +1,22 @@
|
|||||||
from __future__ import unicode_literals
|
from __future__ import unicode_literals
|
||||||
|
import sys
|
||||||
import copy
|
import copy
|
||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
|
PYTHON3 = True
|
||||||
|
if sys.version_info[0] < 3:
|
||||||
|
PYTHON3 = False
|
||||||
|
|
||||||
VERSION = "0.0.13"
|
VERSION = "0.0.13"
|
||||||
|
|
||||||
|
def is_map(obj):
|
||||||
|
return PYTHON3 and isinstance(obj, map)
|
||||||
|
|
||||||
def ensureUtf(s):
|
def ensureUtf(s):
|
||||||
try:
|
try:
|
||||||
if type(s) == unicode:
|
if isinstance(s, str):
|
||||||
|
return s
|
||||||
|
else:
|
||||||
return s.encode('utf8', 'ignore')
|
return s.encode('utf8', 'ignore')
|
||||||
except:
|
except:
|
||||||
return str(s)
|
return str(s)
|
||||||
@@ -138,7 +146,7 @@ class Q(QMixin):
|
|||||||
if isinstance(value, datetime.date):
|
if isinstance(value, datetime.date):
|
||||||
return "'%s'" % value.strftime(self.date_format)
|
return "'%s'" % value.strftime(self.date_format)
|
||||||
|
|
||||||
if isinstance(value, list) or isinstance(value, set) or isinstance(value, map):
|
if isinstance(value, list) or isinstance(value, set) or is_map(value):
|
||||||
return ", ".join([self._get_value(item) for item in value])
|
return ", ".join([self._get_value(item) for item in value])
|
||||||
|
|
||||||
if isinstance(value, F) or isinstance(value, QMixin) or isinstance(value, SQLQuery):
|
if isinstance(value, F) or isinstance(value, QMixin) or isinstance(value, SQLQuery):
|
||||||
@@ -226,6 +234,7 @@ class SQLQuery(object):
|
|||||||
self._extra = {}
|
self._extra = {}
|
||||||
self._limits = None
|
self._limits = None
|
||||||
self._sql = sql
|
self._sql = sql
|
||||||
|
self._nolock = False
|
||||||
|
|
||||||
def has_filters(self,):
|
def has_filters(self,):
|
||||||
return self._order_by or self._group_by or self._joins\
|
return self._order_by or self._group_by or self._joins\
|
||||||
@@ -252,6 +261,11 @@ class SQLQuery(object):
|
|||||||
clone._values = list(args)
|
clone._values = list(args)
|
||||||
return clone
|
return clone
|
||||||
|
|
||||||
|
def with_nolock(self, enabled=True):
|
||||||
|
clone = self._clone()
|
||||||
|
clone._nolock = enabled
|
||||||
|
return clone
|
||||||
|
|
||||||
def filter(self, *args, **kwargs):
|
def filter(self, *args, **kwargs):
|
||||||
clone = self._clone()
|
clone = self._clone()
|
||||||
clone._filters &= self._q(*args, **kwargs)
|
clone._filters &= self._q(*args, **kwargs)
|
||||||
@@ -346,6 +360,11 @@ class SQLCompiler(object):
|
|||||||
if self._joins:
|
if self._joins:
|
||||||
return " ".join(self._joins)
|
return " ".join(self._joins)
|
||||||
|
|
||||||
|
def get_nolock(self,):
|
||||||
|
if self._nolock:
|
||||||
|
return " WITH (NOLOCK)"
|
||||||
|
return ""
|
||||||
|
|
||||||
def get_limits(self,):
|
def get_limits(self,):
|
||||||
if self._limits and self.sql_mode != "SQL_SERVER":
|
if self._limits and self.sql_mode != "SQL_SERVER":
|
||||||
offset = self._limits.start
|
offset = self._limits.start
|
||||||
@@ -370,7 +389,8 @@ class SQLCompiler(object):
|
|||||||
table = self.get_table()
|
table = self.get_table()
|
||||||
|
|
||||||
sql = ["SELECT", self.get_top(), self.get_columns(),
|
sql = ["SELECT", self.get_top(), self.get_columns(),
|
||||||
"FROM", table, "WITH (NOLOCK)",
|
"FROM", table,
|
||||||
|
self.get_nolock(),
|
||||||
self.get_joins(), self.get_where(),
|
self.get_joins(), self.get_where(),
|
||||||
self.get_group_by(), self.get_order_by(),
|
self.get_group_by(), self.get_order_by(),
|
||||||
self.get_limits()]
|
self.get_limits()]
|
||||||
@@ -389,7 +409,8 @@ class SQLCompiler(object):
|
|||||||
|
|
||||||
return ["SELECT * FROM (", "SELECT", ",".join([paginate, self.get_columns()]),
|
return ["SELECT * FROM (", "SELECT", ",".join([paginate, self.get_columns()]),
|
||||||
"FROM", table,
|
"FROM", table,
|
||||||
self.get_joins(), self.get_where(),
|
self.get_joins(),
|
||||||
|
self.get_where(),
|
||||||
self.get_group_by(),
|
self.get_group_by(),
|
||||||
self.get_limits(), ") as tbl_paginated WHERE ", conds]
|
self.get_limits(), ") as tbl_paginated WHERE ", conds]
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
#encoding: utf-8
|
||||||
|
from __future__ import unicode_literals
|
||||||
import unittest
|
import unittest
|
||||||
import datetime
|
import datetime
|
||||||
from sqlquerybuilder import Q, Queryset, F
|
from sqlquerybuilder import Q, Queryset, F
|
||||||
@@ -89,9 +91,8 @@ class TestSqlBuilder(unittest.TestCase):
|
|||||||
str(sql), "SELECT * FROM users WHERE (name in ('jose', 'andres'))")
|
str(sql), "SELECT * FROM users WHERE (name in ('jose', 'andres'))")
|
||||||
|
|
||||||
sql = Queryset("users")
|
sql = Queryset("users")
|
||||||
sql = sql.filter(year__in=[2012, 2014, u"José"])
|
sql = sql.filter(year__in=[2012, 2014, "Jose"])
|
||||||
self.assertEqual(
|
self.assertEqual(str(sql), "SELECT * FROM users WHERE (year in (2012, 2014, 'Jose'))")
|
||||||
unicode(sql), u"SELECT * FROM users WHERE (year in (2012, 2014, 'José'))")
|
|
||||||
|
|
||||||
user = Queryset("users").filter(id=100).values("id")
|
user = Queryset("users").filter(id=100).values("id")
|
||||||
self.assertEqual(str(user), "SELECT id FROM users WHERE (id=100)")
|
self.assertEqual(str(user), "SELECT id FROM users WHERE (id=100)")
|
||||||
|
|||||||
Reference in New Issue
Block a user