fix sqlite3 deprecation warnings under python 3.12
1 files changed, 28 insertions(+), 0 deletions(-)

M yoyo/backends/core/sqlite3.py
M yoyo/backends/core/sqlite3.py +28 -0
@@ 12,6 12,8 @@ 
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import datetime
+
 from yoyo.backends.base import DatabaseBackend
 
 

          
@@ 29,3 31,29 @@ class SQLiteBackend(DatabaseBackend):
         )
         conn.isolation_level = None
         return conn
+
+    def __enter__(self):
+        self._saved_converters = self.driver.converters.copy()
+        self._saved_adapters = self.driver.adapters.copy()
+        self.driver.register_adapter(datetime.datetime, adapt_datetime_iso8601)
+        self.driver.register_converter("timestamp", convert_iso8601)
+        return super().__enter__()
+
+    def __exit__(self, exc_type, exc_value, traceback):
+        self.driver.converters = self._saved_converters
+        self.driver.adapters = self._saved_adapters
+        return super().__exit__(exc_type, exc_value, traceback)
+
+
+def adapt_datetime_iso8601(val):
+    """
+    Adapt datetime.datetime to timezone-naive ISO 8601 date.
+    """
+    return val.isoformat()
+
+
+def convert_iso8601(val):
+    """
+    Convert ISO 8601 date string to datetime.datetime object.
+    """
+    return datetime.datetime.fromisoformat(val.decode())