diff --git a/datagrid_gtk3/db/sqlite.py b/datagrid_gtk3/db/sqlite.py index c7a2828..3bc5769 100644 --- a/datagrid_gtk3/db/sqlite.py +++ b/datagrid_gtk3/db/sqlite.py @@ -183,9 +183,13 @@ def load(self, params=None): # ORDER BY order_by = params.get('order_by', None) - order_by = order_by and collate(self.table.columns[order_by], 'NOCASE') + # Do a numeric ordering first, as suggested here + # (http://stackoverflow.com/a/4204641), and then a case-insensitive one + order_by = (order_by and + [self.table.columns[order_by] + 0, + collate(self.table.columns[order_by], 'NOCASE')]) if order_by is not None and params.get('desc', False): - order_by = desc(order_by) + order_by = [desc(col) for col in order_by] # OFFSET page = params.get('page', 0)