@@ 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())