Skip to content

Commit 138a471

Browse files
committed
added support sqlite3 with py 3.12
1 parent 4ff3d4d commit 138a471

File tree

3 files changed

+54
-2
lines changed

3 files changed

+54
-2
lines changed

.gitignore

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44

55
build/
66
dist/
7-
venv/
8-
.venv/
7+
*venv/
98
*.egg-info/
109

1110
!.gitignore

src/capture_db_queries/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@
66
category=DeprecationWarning,
77
)
88

9+
from . import _sqlite3_adapters_and_converters # noqa: F401, E402
910
from ._logging import switch_logger, switch_trace # noqa: F401, E402
1011
from .decorators import CaptureQueries, ExtCaptureQueriesContext, capture_queries # noqa: F401, E402
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
# type: ignore
2+
3+
"""
4+
https://github.com/WolfgangFahl/pyLoDStorage/issues/127
5+
https://docs.python.org/3/library/sqlite3.html#adapter-and-converter-recipes
6+
7+
fix: DeprecationWarning: The default date converter is deprecated as of Python 3.12;
8+
see the sqlite3 documentation for suggested replacement recipes
9+
"""
10+
11+
import datetime
12+
import sqlite3
13+
14+
15+
def adapt_date_iso(val):
16+
"""Adapt datetime.date to ISO 8601 date."""
17+
return val.isoformat()
18+
19+
20+
def adapt_datetime_iso(val):
21+
"""Adapt datetime.datetime to timezone-naive ISO 8601 date."""
22+
return val.isoformat()
23+
24+
25+
def adapt_datetime_epoch(val):
26+
"""Adapt datetime.datetime to Unix timestamp."""
27+
return int(val.timestamp())
28+
29+
30+
sqlite3.register_adapter(datetime.date, adapt_date_iso)
31+
sqlite3.register_adapter(datetime.datetime, adapt_datetime_iso)
32+
sqlite3.register_adapter(datetime.datetime, adapt_datetime_epoch)
33+
34+
35+
def convert_date(val):
36+
"""Convert ISO 8601 date to datetime.date object."""
37+
return datetime.date.fromisoformat(val.decode())
38+
39+
40+
def convert_datetime(val):
41+
"""Convert ISO 8601 datetime to datetime.datetime object."""
42+
return datetime.datetime.fromisoformat(val.decode())
43+
44+
45+
def convert_timestamp(val):
46+
"""Convert Unix epoch timestamp to datetime.datetime object."""
47+
return datetime.datetime.fromtimestamp(int(val)) # noqa: DTZ006
48+
49+
50+
sqlite3.register_converter('date', convert_date)
51+
sqlite3.register_converter('datetime', convert_datetime)
52+
sqlite3.register_converter('timestamp', convert_timestamp)

0 commit comments

Comments
 (0)