Skip to content

Commit edf7449

Browse files
gh-99392: Fix sqlite3 converter recipes (GH-99393)
(cherry picked from commit dfc1b17) Co-authored-by: naglis <827324+naglis@users.noreply.github.com>
1 parent 944ac46 commit edf7449

File tree

1 file changed

+22
-3
lines changed

1 file changed

+22
-3
lines changed

Doc/library/sqlite3.rst

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2069,20 +2069,39 @@ This section shows recipes for common adapters and converters.
20692069

20702070
def convert_date(val):
20712071
"""Convert ISO 8601 date to datetime.date object."""
2072-
return datetime.date.fromisoformat(val)
2072+
return datetime.date.fromisoformat(val.decode())
20732073

20742074
def convert_datetime(val):
20752075
"""Convert ISO 8601 datetime to datetime.datetime object."""
2076-
return datetime.datetime.fromisoformat(val)
2076+
return datetime.datetime.fromisoformat(val.decode())
20772077

20782078
def convert_timestamp(val):
20792079
"""Convert Unix epoch timestamp to datetime.datetime object."""
2080-
return datetime.datetime.fromtimestamp(val)
2080+
return datetime.datetime.fromtimestamp(int(val))
20812081

20822082
sqlite3.register_converter("date", convert_date)
20832083
sqlite3.register_converter("datetime", convert_datetime)
20842084
sqlite3.register_converter("timestamp", convert_timestamp)
20852085

2086+
.. testcode::
2087+
:hide:
2088+
2089+
dt = datetime.datetime(2019, 5, 18, 15, 17, 8, 123456)
2090+
2091+
assert adapt_date_iso(dt.date()) == "2019-05-18"
2092+
assert convert_date(b"2019-05-18") == dt.date()
2093+
2094+
assert adapt_datetime_iso(dt) == "2019-05-18T15:17:08.123456"
2095+
assert convert_datetime(b"2019-05-18T15:17:08.123456") == dt
2096+
2097+
# Using current time as fromtimestamp() returns local date/time.
2098+
# Droping microseconds as adapt_datetime_epoch truncates fractional second part.
2099+
now = datetime.datetime.now().replace(microsecond=0)
2100+
current_timestamp = int(now.timestamp())
2101+
2102+
assert adapt_datetime_epoch(now) == current_timestamp
2103+
assert convert_timestamp(str(current_timestamp).encode()) == now
2104+
20862105

20872106
.. _sqlite3-connection-shortcuts:
20882107

0 commit comments

Comments
 (0)