From 0e5c49b13852bdb11441e17461f9283f8aa53a8a Mon Sep 17 00:00:00 2001 From: hanxuanyu <2252193204@qq.com> Date: Thu, 28 Mar 2024 13:54:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=B9=E4=BA=8E=E8=A1=A8=E7=BB=93=E6=9E=84?= =?UTF-8?q?=E8=BF=9B=E4=B8=AD=E4=BA=8C=E8=BF=9B=E5=88=B6=E5=80=BC=E8=BF=9B?= =?UTF-8?q?=E8=A1=8C=E4=BF=AE=E6=AD=A3=EF=BC=8C=E9=81=BF=E5=85=8D=E5=BB=BA?= =?UTF-8?q?=E8=A1=A8=E6=97=B6=E8=AF=AD=E6=B3=95=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- database_migrate/db_migrate.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/database_migrate/db_migrate.py b/database_migrate/db_migrate.py index e87e973..2c4e616 100644 --- a/database_migrate/db_migrate.py +++ b/database_migrate/db_migrate.py @@ -6,6 +6,7 @@ import argparse from concurrent.futures import ThreadPoolExecutor, as_completed from typing import List import logging +import re # 默认配置文件路径 DEFAULT_CONFIG_PATH = "config.yaml" @@ -111,13 +112,26 @@ class DBMigrator: with source_db.cursor() as source_cursor, target_db.cursor() as target_cursor: source_cursor.execute(f"SHOW CREATE TABLE {table};") create_table_sql = source_cursor.fetchone()[1] - target_cursor.execute(create_table_sql) + + # 检查并修正BIT(1)类型字段的默认值表示 + corrected_sql = self.correct_bit_default_value(create_table_sql) + + target_cursor.execute(corrected_sql) target_db.commit() return True except Exception as e: logging.error(f"Error copying table structure for {table}: {e}") return False + def correct_bit_default_value(self, sql): + """ + 检查并修正BIT(1)类型字段的默认值表示。 + 将错误的表示('0'/'1')转换为正确的二进制表示(b'0'/b'1')。 + """ + # 使用正则表达式匹配并修正BIT(1)类型字段的默认值表示 + corrected_sql = re.sub(r"BIT$1$( NOT NULL)? DEFAULT '([01])'", r"BIT(1)\1 DEFAULT b'\2'", sql) + return corrected_sql + def migrate_table_data(self, table): # 为每个表迁移数据 try: