diff options
author | Petri Lehtinen <petri@digip.org> | 2013-02-26 19:45:09 (GMT) |
---|---|---|
committer | Petri Lehtinen <petri@digip.org> | 2013-02-26 19:45:09 (GMT) |
commit | 6401ad66a76a2e447aad0c0aed173926b66acfd9 (patch) | |
tree | 438ac83a5ce58ad06d968cd9850e4e228209a06a | |
parent | 66fef9f049c7f3f800ff6a25262eba920bdcec98 (diff) | |
parent | 5f794098898b49650b2ef6a0c4f48aa0d03b0298 (diff) | |
download | cpython-6401ad66a76a2e447aad0c0aed173926b66acfd9.zip cpython-6401ad66a76a2e447aad0c0aed173926b66acfd9.tar.gz cpython-6401ad66a76a2e447aad0c0aed173926b66acfd9.tar.bz2 |
Issue #14720: Enhance sqlite3 microsecond conversion, document its behavior
-rw-r--r-- | Doc/library/sqlite3.rst | 4 | ||||
-rw-r--r-- | Lib/sqlite3/dbapi2.py | 2 | ||||
-rw-r--r-- | Lib/sqlite3/test/regression.py | 13 |
3 files changed, 16 insertions, 3 deletions
diff --git a/Doc/library/sqlite3.rst b/Doc/library/sqlite3.rst index 4e9e83e..08e3a2e 100644 --- a/Doc/library/sqlite3.rst +++ b/Doc/library/sqlite3.rst @@ -830,6 +830,10 @@ The following example demonstrates this. .. literalinclude:: ../includes/sqlite3/pysqlite_datetime.py +If a timestamp stored in SQLite has a fractional part longer than 6 +numbers, its value will be truncated to microsecond precision by the +timestamp converter. + .. _sqlite3-controlling-transactions: diff --git a/Lib/sqlite3/dbapi2.py b/Lib/sqlite3/dbapi2.py index 1048992..9a0b766 100644 --- a/Lib/sqlite3/dbapi2.py +++ b/Lib/sqlite3/dbapi2.py @@ -67,7 +67,7 @@ def register_adapters_and_converters(): timepart_full = timepart.split(b".") hours, minutes, seconds = map(int, timepart_full[0].split(b":")) if len(timepart_full) == 2: - microseconds = int('{:0<6}'.format(timepart_full[1].decode())) + microseconds = int('{:0<6.6}'.format(timepart_full[1].decode())) else: microseconds = 0 diff --git a/Lib/sqlite3/test/regression.py b/Lib/sqlite3/test/regression.py index 87d2cce..5e2fbf9 100644 --- a/Lib/sqlite3/test/regression.py +++ b/Lib/sqlite3/test/regression.py @@ -313,11 +313,20 @@ class RegressionTests(unittest.TestCase): con = sqlite.connect(":memory:", detect_types=sqlite.PARSE_DECLTYPES) cur = con.cursor() cur.execute("CREATE TABLE t (x TIMESTAMP)") + + # Microseconds should be 456000 cur.execute("INSERT INTO t (x) VALUES ('2012-04-04 15:06:00.456')") + + # Microseconds should be truncated to 123456 + cur.execute("INSERT INTO t (x) VALUES ('2012-04-04 15:06:00.123456789')") + cur.execute("SELECT * FROM t") - date = cur.fetchall()[0][0] + values = [x[0] for x in cur.fetchall()] - self.assertEqual(date, datetime.datetime(2012, 4, 4, 15, 6, 0, 456000)) + self.assertEqual(values, [ + datetime.datetime(2012, 4, 4, 15, 6, 0, 456000), + datetime.datetime(2012, 4, 4, 15, 6, 0, 123456), + ]) def suite(): |