diff --git a/my/core/compat.py b/my/core/compat.py index eb973fa..c85ea72 100644 --- a/my/core/compat.py +++ b/my/core/compat.py @@ -64,3 +64,19 @@ else: import os windows = os.name == 'nt' + + +import sqlite3 +def sqlite_backup(*, source: sqlite3.Connection, dest: sqlite3.Connection, **kwargs) -> None: + if sys.version_info[:2] >= (3, 7): + source.backup(dest, **kwargs) + else: + # https://stackoverflow.com/a/10856450/706389 + import io + tempfile = io.StringIO() + for line in source.iterdump(): + tempfile.write('%s\n' % line) + tempfile.seek(0) + + dest.cursor().executescript(tempfile.read()) + dest.commit() diff --git a/my/core/sqlite.py b/my/core/sqlite.py index e6180b3..1b38869 100644 --- a/my/core/sqlite.py +++ b/my/core/sqlite.py @@ -45,6 +45,7 @@ def sqlite_copy_and_open(db: PathIsh) -> sqlite3.Connection: tocopy = [dp] + [p for p in dp.parent.glob(dp.name + '-*') if not p.name.endswith('-shm')] for p in tocopy: shutil.copy(p, tdir / p.name) - with sqlite3.connect(tdir / dp.name) as conn: - conn.backup(dest) + with sqlite3.connect(str(tdir / dp.name)) as conn: + from .compat import sqlite_backup + sqlite_backup(source=conn, dest=dest) return dest