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 import alias
|
||||
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
|
||||
|
||||
|
||||
@ -282,9 +282,7 @@ class Table(object):
|
||||
args = self._args_to_clause(_filter)
|
||||
query = self.table.select(whereclause=args, limit=1)
|
||||
rp = self.database.executable.execute(query)
|
||||
data = rp.fetchone()
|
||||
if data is not None:
|
||||
return data
|
||||
return convert_row(rp.fetchone())
|
||||
|
||||
def _args_to_order_by(self, order_by):
|
||||
if order_by[0] == '-':
|
||||
|
||||
@ -1,6 +1,11 @@
|
||||
from datetime import datetime, timedelta
|
||||
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
|
||||
|
||||
|
||||
@ -16,6 +21,12 @@ def guess_type(sample):
|
||||
return UnicodeText
|
||||
|
||||
|
||||
def convert_row(row):
|
||||
if row is None:
|
||||
return None
|
||||
return OrderedDict(row.items())
|
||||
|
||||
|
||||
class ResultIter(object):
|
||||
""" SQLAlchemy ResultProxies are not iterable to get a
|
||||
list of dictionaries. This is to wrap them. """
|
||||
@ -47,7 +58,7 @@ class ResultIter(object):
|
||||
else:
|
||||
# stop here
|
||||
raise StopIteration
|
||||
return row
|
||||
return convert_row(row)
|
||||
|
||||
next = __next__
|
||||
|
||||
@ -66,6 +77,8 @@ def sqlite_datetime_fix():
|
||||
return (value / 1000 - self.epoch).total_seconds()
|
||||
|
||||
def process_result_value(self, value, dialect):
|
||||
if isinstance(value, basestring):
|
||||
return value
|
||||
return self.epoch + timedelta(seconds=value / 1000)
|
||||
|
||||
def is_sqlite(inspector):
|
||||
|
||||
@ -124,9 +124,11 @@ class DatabaseTestCase(unittest.TestCase):
|
||||
|
||||
def test_table_cache_updates(self):
|
||||
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')
|
||||
assert list(tbl2.all()) == [(1, 'John', 'Smith')]
|
||||
assert dict(tbl2.all().next()) == dict(data), (tbl2.all().next(), data)
|
||||
|
||||
|
||||
class TableTestCase(unittest.TestCase):
|
||||
|
||||
Loading…
Reference in New Issue
Block a user