diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index cb249b3..edac5d9 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -1,6 +1,7 @@ from .utils import sqlite3, OperationalError, suggest_column_types, column_affinity from collections import namedtuple, OrderedDict import datetime +import decimal import hashlib import itertools import json @@ -42,6 +43,7 @@ COLUMN_TYPE_MAPPING = { datetime.datetime: "TEXT", datetime.date: "TEXT", datetime.time: "TEXT", + decimal.Decimal: "FLOAT", None.__class__: "TEXT", # SQLite explicit types "TEXT": "TEXT", @@ -1325,6 +1327,8 @@ def chunks(sequence, size): def jsonify_if_needed(value): + if isinstance(value, decimal.Decimal): + return float(value) if isinstance(value, (dict, list, tuple)): return json.dumps(value, default=repr) elif isinstance(value, (datetime.time, datetime.date, datetime.datetime)): diff --git a/tests/test_create.py b/tests/test_create.py index 79123b8..22e4b7b 100644 --- a/tests/test_create.py +++ b/tests/test_create.py @@ -9,6 +9,7 @@ from sqlite_utils.db import ( from sqlite_utils.utils import sqlite3 import collections import datetime +import decimal import json import pathlib import pytest @@ -132,6 +133,7 @@ def test_create_table_with_not_null(fresh_db): [{"name": "create", "type": "TEXT"}, {"name": "table", "type": "TEXT"}], ), ({"day": datetime.time(11, 0)}, [{"name": "day", "type": "TEXT"}]), + ({"decimal": decimal.Decimal("1.2")}, [{"name": "decimal", "type": "FLOAT"}]), ), ) def test_create_table_from_example(fresh_db, example, expected_columns):