From b6da11ec2d9b958b0f7c215e5e21fdba2c666368 Mon Sep 17 00:00:00 2001 From: Evgeny Volferts Date: Mon, 26 Oct 2026 05:32:12 +0800 Subject: [PATCH] fix: use database dialect for configuration backup and restore (#1370) --- src/modules/WireguardConfiguration.py | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/modules/WireguardConfiguration.py b/src/modules/WireguardConfiguration.py index 548dfcbe..5bac480f 100644 --- a/src/modules/WireguardConfiguration.py +++ b/src/modules/WireguardConfiguration.py @@ -235,14 +235,13 @@ class WireguardConfiguration: existingTables = [self.Name, f'{self.Name}_restrict_access', f'{self.Name}_transfer', f'{self.Name}_deleted'] try: with self.engine.begin() as conn: - for t in existingTables: + for name in existingTables: + table = sqlalchemy.Table(name, sqlalchemy.MetaData()) conn.execute( - sqlalchemy.text( - f'DROP TABLE "{t}"' - ) + sqlalchemy.schema.DropTable(table, if_exists=True) ) - except Exception as e: - current_app.logger.error("Dropping table failed") + except Exception: + current_app.logger.exception("Dropping table failed") return False return True @@ -327,11 +326,19 @@ class WireguardConfiguration: rows = conn.execute(i.select()).mappings().fetchall() for row in rows: insert_stmt = i.insert().values(dict(row)) - yield str(insert_stmt.compile(compile_kwargs={"literal_binds": True})) + yield str( + insert_stmt.compile( + dialect=self.engine.dialect, + compile_kwargs={"literal_binds": True}, + ) + ) def __importDatabase(self, sqlFilePath, restore = False) -> bool: if not restore: - self.__dropDatabase() + if not self.__dropDatabase(): + raise RuntimeError( + f"Failed to drop tables for configuration {self.Name}" + ) self.createDatabase() if not os.path.exists(sqlFilePath): return False