Revert to using OrderedDict.
This commit is contained in:
parent
a963e4a5ed
commit
6ef4cd7814
@ -5,7 +5,7 @@ from sqlalchemy.sql import and_, expression
|
|||||||
from sqlalchemy.schema import Column, Index
|
from sqlalchemy.schema import Column, Index
|
||||||
from sqlalchemy import alias
|
from sqlalchemy import alias
|
||||||
from dataset.persistence.util import guess_type
|
from dataset.persistence.util import guess_type
|
||||||
from dataset.persistence.util import ResultIter
|
from dataset.persistence.util import ResultIter, convert_row
|
||||||
from dataset.util import DatasetException
|
from dataset.util import DatasetException
|
||||||
|
|
||||||
|
|
||||||
@ -282,9 +282,7 @@ class Table(object):
|
|||||||
args = self._args_to_clause(_filter)
|
args = self._args_to_clause(_filter)
|
||||||
query = self.table.select(whereclause=args, limit=1)
|
query = self.table.select(whereclause=args, limit=1)
|
||||||
rp = self.database.executable.execute(query)
|
rp = self.database.executable.execute(query)
|
||||||
data = rp.fetchone()
|
return convert_row(rp.fetchone())
|
||||||
if data is not None:
|
|
||||||
return data
|
|
||||||
|
|
||||||
def _args_to_order_by(self, order_by):
|
def _args_to_order_by(self, order_by):
|
||||||
if order_by[0] == '-':
|
if order_by[0] == '-':
|
||||||
|
|||||||
@ -1,6 +1,11 @@
|
|||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from inspect import isgenerator
|
from inspect import isgenerator
|
||||||
|
|
||||||
|
try:
|
||||||
|
from collections import OrderedDict
|
||||||
|
except ImportError:
|
||||||
|
from ordereddict import OrderedDict
|
||||||
|
|
||||||
from sqlalchemy import Integer, UnicodeText, Float, DateTime, Boolean, types, Table, event
|
from sqlalchemy import Integer, UnicodeText, Float, DateTime, Boolean, types, Table, event
|
||||||
|
|
||||||
|
|
||||||
@ -16,6 +21,12 @@ def guess_type(sample):
|
|||||||
return UnicodeText
|
return UnicodeText
|
||||||
|
|
||||||
|
|
||||||
|
def convert_row(row):
|
||||||
|
if row is None:
|
||||||
|
return None
|
||||||
|
return OrderedDict(row.items())
|
||||||
|
|
||||||
|
|
||||||
class ResultIter(object):
|
class ResultIter(object):
|
||||||
""" SQLAlchemy ResultProxies are not iterable to get a
|
""" SQLAlchemy ResultProxies are not iterable to get a
|
||||||
list of dictionaries. This is to wrap them. """
|
list of dictionaries. This is to wrap them. """
|
||||||
@ -47,7 +58,7 @@ class ResultIter(object):
|
|||||||
else:
|
else:
|
||||||
# stop here
|
# stop here
|
||||||
raise StopIteration
|
raise StopIteration
|
||||||
return row
|
return convert_row(row)
|
||||||
|
|
||||||
next = __next__
|
next = __next__
|
||||||
|
|
||||||
@ -66,6 +77,8 @@ def sqlite_datetime_fix():
|
|||||||
return (value / 1000 - self.epoch).total_seconds()
|
return (value / 1000 - self.epoch).total_seconds()
|
||||||
|
|
||||||
def process_result_value(self, value, dialect):
|
def process_result_value(self, value, dialect):
|
||||||
|
if isinstance(value, basestring):
|
||||||
|
return value
|
||||||
return self.epoch + timedelta(seconds=value / 1000)
|
return self.epoch + timedelta(seconds=value / 1000)
|
||||||
|
|
||||||
def is_sqlite(inspector):
|
def is_sqlite(inspector):
|
||||||
|
|||||||
@ -124,9 +124,11 @@ class DatabaseTestCase(unittest.TestCase):
|
|||||||
|
|
||||||
def test_table_cache_updates(self):
|
def test_table_cache_updates(self):
|
||||||
tbl1 = self.db.get_table('people')
|
tbl1 = self.db.get_table('people')
|
||||||
tbl1.insert(OrderedDict([('first_name', 'John'), ('last_name', 'Smith')]))
|
data = OrderedDict([('first_name', 'John'), ('last_name', 'Smith')])
|
||||||
|
tbl1.insert(data)
|
||||||
|
data['id'] = 1
|
||||||
tbl2 = self.db.get_table('people')
|
tbl2 = self.db.get_table('people')
|
||||||
assert list(tbl2.all()) == [(1, 'John', 'Smith')]
|
assert dict(tbl2.all().next()) == dict(data), (tbl2.all().next(), data)
|
||||||
|
|
||||||
|
|
||||||
class TableTestCase(unittest.TestCase):
|
class TableTestCase(unittest.TestCase):
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user