{"id":38140,"date":"2025-05-19T14:14:25","date_gmt":"2025-05-19T06:14:25","guid":{"rendered":"https:\/\/www.wsisp.com\/helps\/38140.html"},"modified":"2025-05-19T14:14:25","modified_gmt":"2025-05-19T06:14:25","slug":"vue3_flask%e5%ae%9e%e7%8e%b0mysql%e6%95%b0%e6%8d%ae%e5%ba%93%e5%af%b9%e6%af%94%e5%8a%9f%e8%83%bd","status":"publish","type":"post","link":"https:\/\/www.wsisp.com\/helps\/38140.html","title":{"rendered":"vue3_flask\u5b9e\u73b0mysql\u6570\u636e\u5e93\u5bf9\u6bd4\u529f\u80fd"},"content":{"rendered":"<p>\u5b9e\u73b0\u5bf9mysql\u4e2d\u4e24\u4e2a\u6570\u636e\u5e93\u7684\u8868\u3001\u8868\u7ed3\u6784\u3001\u8868\u6570\u636e\u7684\u5bf9\u6bd4\u529f\u80fd, \u521d\u59cb\u5316\u754c\u9762\u6548\u679c\u5982\u4e0b\u56fe<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/05\/20250519061421-682acc3dbb54c.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h3>\u57fa\u7840\u73af\u5883\u8bf7\u53c2\u8003<\/h3>\n<p>vue3&#043;flask&#043;sqlite\u524d\u540e\u7aef\u9879\u76ee\u5b9e\u6218 <\/p>\n<h3>\u4ee3\u7801\u6587\u4ef6\u7ed3\u6784\u53d8\u5316<\/h3>\n<p>api<span class=\"token operator\">\/<\/span>    # \u540e\u7aef\u76f8\u5173<br \/>\n\u251c\u2500\u2500 daos<span class=\"token operator\">\/<\/span><br \/>\n\u2502   \u251c\u2500\u2500 __init__<span class=\"token punctuation\">.<\/span>py<br \/>\n\u2502   \u2514\u2500\u2500 db_compare_dao<span class=\"token punctuation\">.<\/span>py    # \u65b0\u589e<br \/>\n\u251c\u2500\u2500 routes<span class=\"token operator\">\/<\/span><br \/>\n\u2502   \u251c\u2500\u2500 __init__<span class=\"token punctuation\">.<\/span>py<br \/>\n\u2502   \u2514\u2500\u2500 db_compare_routes<span class=\"token punctuation\">.<\/span>py  # \u65b0\u589e<br \/>\n\u251c\u2500\u2500 run<span class=\"token punctuation\">.<\/span>py                    # \u539f\u6709\u4ee3\u7801\u589e\u52a0<\/p>\n<p>ui<span class=\"token operator\">\/<\/span>    # \u524d\u7aef\u76f8\u5173<br \/>\n\u251c\u2500\u2500 src<span class=\"token operator\">\/<\/span><br \/>\n\u2502   \u251c\u2500\u2500 views<span class=\"token operator\">\/<\/span><br \/>\n\u2502       \u2514\u2500\u2500 DbCompare<span class=\"token punctuation\">.<\/span>vue  # \u65b0\u589e<br \/>\n\u2502   \u251c\u2500\u2500 router<span class=\"token operator\">\/<\/span><br \/>\n\u2502       \u2514\u2500\u2500 index<span class=\"token punctuation\">.<\/span>js       # \u539f\u6709\u4ee3\u7801\u589e\u52a0<\/p>\n<h2>\u540e\u7aef\u76f8\u5173<\/h2>\n<h3>api\/daos\/db_compare_dao.py<\/h3>\n<p><span class=\"token keyword\">import<\/span> pymysql<br \/>\n<span class=\"token keyword\">import<\/span> logging<br \/>\n<span class=\"token keyword\">from<\/span> datetime <span class=\"token keyword\">import<\/span> datetime<br \/>\n<span class=\"token keyword\">from<\/span> typing <span class=\"token keyword\">import<\/span> Dict<span class=\"token punctuation\">,<\/span> List<span class=\"token punctuation\">,<\/span> Tuple<span class=\"token punctuation\">,<\/span> Optional<\/p>\n<p># \u914d\u7f6e\u65e5\u5fd7\u7cfb\u7edf<br \/>\nlogging<span class=\"token punctuation\">.<\/span><span class=\"token function\">basicConfig<\/span><span class=\"token punctuation\">(<\/span><br \/>\n    level<span class=\"token operator\">&#061;<\/span>logging<span class=\"token punctuation\">.<\/span><span class=\"token constant\">INFO<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    format<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;%(asctime)s &#8211; %(levelname)s &#8211; %(message)s&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    handlers<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span>logging<span class=\"token punctuation\">.<\/span><span class=\"token function\">StreamHandler<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span><br \/>\n<span class=\"token punctuation\">)<\/span><br \/>\nlogger <span class=\"token operator\">&#061;<\/span> logging<span class=\"token punctuation\">.<\/span><span class=\"token function\">getLogger<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;db_comparison&#039;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>def <span class=\"token function\">get_db_connection<\/span><span class=\"token punctuation\">(<\/span>db_config<span class=\"token operator\">:<\/span> Dict<span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token string\">&#034;&#034;<\/span><span class=\"token string\">&#034;\u83b7\u53d6\u6570\u636e\u5e93\u8fde\u63a5&#034;<\/span><span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> pymysql<span class=\"token punctuation\">.<\/span><span class=\"token function\">connect<\/span><span class=\"token punctuation\">(<\/span><br \/>\n        host<span class=\"token operator\">&#061;<\/span>db_config<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;host&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        port<span class=\"token operator\">&#061;<\/span>db_config<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;port&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        user<span class=\"token operator\">&#061;<\/span>db_config<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;user&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        password<span class=\"token operator\">&#061;<\/span>db_config<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;password&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        database<span class=\"token operator\">&#061;<\/span>db_config<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;database&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        cursorclass<span class=\"token operator\">&#061;<\/span>pymysql<span class=\"token punctuation\">.<\/span>cursors<span class=\"token punctuation\">.<\/span>DictCursor<span class=\"token punctuation\">,<\/span><br \/>\n        charset<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;utf8mb4&#039;<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><\/p>\n<p>def <span class=\"token function\">compare_columns<\/span><span class=\"token punctuation\">(<\/span>col1<span class=\"token operator\">:<\/span> Dict<span class=\"token punctuation\">,<\/span> col2<span class=\"token operator\">:<\/span> Dict<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> bool<span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token string\">&#034;&#034;<\/span><span class=\"token string\">&#034;\u6bd4\u8f83\u4e24\u4e2a\u5217\u7684\u5c5e\u6027\u662f\u5426\u4e00\u81f4&#034;<\/span><span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span><br \/>\n            col1<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;COLUMN_NAME&#039;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;&#061;<\/span> col2<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;COLUMN_NAME&#039;<\/span><span class=\"token punctuation\">]<\/span> and<br \/>\n            col1<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;DATA_TYPE&#039;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;&#061;<\/span> col2<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;DATA_TYPE&#039;<\/span><span class=\"token punctuation\">]<\/span> and<br \/>\n            col1<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;IS_NULLABLE&#039;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;&#061;<\/span> col2<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;IS_NULLABLE&#039;<\/span><span class=\"token punctuation\">]<\/span> and<br \/>\n            <span class=\"token function\">str<\/span><span class=\"token punctuation\">(<\/span>col1<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;COLUMN_DEFAULT&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token function\">str<\/span><span class=\"token punctuation\">(<\/span>col2<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;COLUMN_DEFAULT&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> and<br \/>\n            col1<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;CHARACTER_MAXIMUM_LENGTH&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&#061;<\/span> col2<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;CHARACTER_MAXIMUM_LENGTH&#039;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token punctuation\">)<\/span><\/p>\n<p>def <span class=\"token function\">get_column_diff_details<\/span><span class=\"token punctuation\">(<\/span>col1<span class=\"token operator\">:<\/span> Dict<span class=\"token punctuation\">,<\/span> col2<span class=\"token operator\">:<\/span> Dict<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> List<span class=\"token punctuation\">[<\/span>str<span class=\"token punctuation\">]<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token string\">&#034;&#034;<\/span><span class=\"token string\">&#034;\u83b7\u53d6\u5217\u5c5e\u6027\u7684\u5177\u4f53\u5dee\u5f02&#034;<\/span><span class=\"token string\">&#034;&#034;<\/span><br \/>\n    differences <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> col1<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;DATA_TYPE&#039;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">!&#061;<\/span> col2<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;DATA_TYPE&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">:<\/span><br \/>\n        differences<span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;\u7c7b\u578b\u4e0d\u540c({col1[&#039;DATA_TYPE&#039;]} vs {col2[&#039;DATA_TYPE&#039;]})&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> col1<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;IS_NULLABLE&#039;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">!&#061;<\/span> col2<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;IS_NULLABLE&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">:<\/span><br \/>\n        differences<span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;\u53ef\u7a7a\u6027\u4e0d\u540c({col1[&#039;IS_NULLABLE&#039;]} vs {col2[&#039;IS_NULLABLE&#039;]})&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> <span class=\"token function\">str<\/span><span class=\"token punctuation\">(<\/span>col1<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;COLUMN_DEFAULT&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> <span class=\"token function\">str<\/span><span class=\"token punctuation\">(<\/span>col2<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;COLUMN_DEFAULT&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span><br \/>\n        differences<span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;\u9ed8\u8ba4\u503c\u4e0d\u540c({col1.get(&#039;COLUMN_DEFAULT&#039;)} vs {col2.get(&#039;COLUMN_DEFAULT&#039;)})&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">if<\/span> col1<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;CHARACTER_MAXIMUM_LENGTH&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">!&#061;<\/span> col2<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;CHARACTER_MAXIMUM_LENGTH&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span><br \/>\n        differences<span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><br \/>\n            f<span class=\"token string\">&#034;\u957f\u5ea6\u4e0d\u540c({col1.get(&#039;CHARACTER_MAXIMUM_LENGTH&#039;)} vs {col2.get(&#039;CHARACTER_MAXIMUM_LENGTH&#039;)})&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> differences<\/p>\n<p>def <span class=\"token function\">get_table_structure<\/span><span class=\"token punctuation\">(<\/span>cursor<span class=\"token punctuation\">,<\/span> db_name<span class=\"token operator\">:<\/span> str<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> List<span class=\"token punctuation\">[<\/span>Dict<span class=\"token punctuation\">]<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token string\">&#034;&#034;<\/span><span class=\"token string\">&#034;\u83b7\u53d6\u8868\u7ed3\u6784\u4fe1\u606f&#034;<\/span><span class=\"token string\">&#034;&#034;<\/span><br \/>\n    cursor<span class=\"token punctuation\">.<\/span><span class=\"token function\">execute<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;&#034;<\/span>&#034;<br \/>\n        <span class=\"token constant\">SELECT<\/span><br \/>\n            <span class=\"token constant\">TABLE_NAME<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token constant\">COLUMN_NAME<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token constant\">DATA_TYPE<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token constant\">IS_NULLABLE<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token constant\">COLUMN_DEFAULT<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token constant\">CHARACTER_MAXIMUM_LENGTH<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token constant\">COLUMN_TYPE<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token constant\">EXTRA<\/span><br \/>\n        <span class=\"token constant\">FROM<\/span> <span class=\"token constant\">INFORMATION_SCHEMA<\/span><span class=\"token punctuation\">.<\/span><span class=\"token constant\">COLUMNS<\/span><br \/>\n        <span class=\"token constant\">WHERE<\/span> <span class=\"token constant\">TABLE_SCHEMA<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;{db_name}&#039;<\/span><br \/>\n        <span class=\"token constant\">ORDER<\/span> <span class=\"token constant\">BY<\/span> <span class=\"token constant\">TABLE_NAME<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token constant\">ORDINAL_POSITION<\/span><br \/>\n    <span class=\"token string\">&#034;&#034;<\/span>&#034;<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> cursor<span class=\"token punctuation\">.<\/span><span class=\"token function\">fetchall<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>def <span class=\"token function\">get_table_hash<\/span><span class=\"token punctuation\">(<\/span>cursor<span class=\"token punctuation\">,<\/span> table_name<span class=\"token operator\">:<\/span> str<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> Tuple<span class=\"token punctuation\">[<\/span>Optional<span class=\"token punctuation\">[<\/span>str<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> int<span class=\"token punctuation\">]<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token string\">&#034;&#034;<\/span><span class=\"token string\">&#034;\u83b7\u53d6\u8868\u7684\u54c8\u5e0c\u503c\u548c\u884c\u6570&#034;<\/span><span class=\"token string\">&#034;&#034;<\/span><br \/>\n    <span class=\"token keyword\">try<\/span><span class=\"token operator\">:<\/span><br \/>\n        # <span class=\"token number\">1.<\/span> \u83b7\u53d6\u8868\u7684\u5217\u4fe1\u606f<br \/>\n        cursor<span class=\"token punctuation\">.<\/span><span class=\"token function\">execute<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;SHOW COLUMNS FROM &#096;{table_name}&#096;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        columns <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span>row<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;Field&#039;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token keyword\">for<\/span> row <span class=\"token keyword\">in<\/span> cursor<span class=\"token punctuation\">.<\/span><span class=\"token function\">fetchall<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>        <span class=\"token keyword\">if<\/span> not columns<span class=\"token operator\">:<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">warning<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;\u8868 {table_name} \u6ca1\u6709\u5217&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> None<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><\/p>\n<p>        # <span class=\"token number\">2.<\/span> \u83b7\u53d6\u884c\u6570<br \/>\n        cursor<span class=\"token punctuation\">.<\/span><span class=\"token function\">execute<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;SELECT COUNT(*) AS count FROM &#096;{table_name}&#096;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        row_count <span class=\"token operator\">&#061;<\/span> cursor<span class=\"token punctuation\">.<\/span><span class=\"token function\">fetchone<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;count&#039;<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>        <span class=\"token keyword\">if<\/span> row_count <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token number\">0<\/span><span class=\"token operator\">:<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;\u8868 {table_name} \u662f\u7a7a\u8868&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> None<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><\/p>\n<p>        # <span class=\"token number\">3.<\/span> \u51c6\u5907\u5b89\u5168\u7684\u5217\u540d\u5217\u8868<br \/>\n        safe_columns <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span>f<span class=\"token string\">&#034;&#096;{col}&#096;&#034;<\/span> <span class=\"token keyword\">for<\/span> col <span class=\"token keyword\">in<\/span> columns<span class=\"token punctuation\">]<\/span><br \/>\n        columns_concat <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;, &#034;<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">join<\/span><span class=\"token punctuation\">(<\/span>safe_columns<span class=\"token punctuation\">)<\/span><\/p>\n<p>        # <span class=\"token number\">4.<\/span> \u589e\u52a0 <span class=\"token constant\">GROUP_CONCAT<\/span> \u6700\u5927\u957f\u5ea6\u9650\u5236<br \/>\n        cursor<span class=\"token punctuation\">.<\/span><span class=\"token function\">execute<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;SET SESSION group_concat_max_len &#061; 1000000&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        # <span class=\"token number\">5.<\/span> \u6784\u5efa\u5e76\u6267\u884c\u54c8\u5e0c\u67e5\u8be2<br \/>\n        query <span class=\"token operator\">&#061;<\/span> f<span class=\"token string\">&#034;&#034;<\/span>&#034;<br \/>\n            <span class=\"token constant\">SELECT<\/span> <span class=\"token constant\">MD5<\/span><span class=\"token punctuation\">(<\/span><br \/>\n                <span class=\"token constant\">GROUP_CONCAT<\/span><span class=\"token punctuation\">(<\/span><br \/>\n                    <span class=\"token constant\">CONCAT_WS<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;|&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span>columns_concat<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                    <span class=\"token constant\">ORDER<\/span> <span class=\"token constant\">BY<\/span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">&#096;<\/span><span class=\"token string\">{columns[0]}<\/span><span class=\"token template-punctuation string\">&#096;<\/span><\/span><br \/>\n                    <span class=\"token constant\">SEPARATOR<\/span> <span class=\"token string\">&#039;||&#039;<\/span><br \/>\n                <span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token punctuation\">)<\/span> <span class=\"token constant\">AS<\/span> hash<span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token constant\">COUNT<\/span><span class=\"token punctuation\">(<\/span><span class=\"token operator\">*<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token constant\">AS<\/span> count<br \/>\n            <span class=\"token constant\">FROM<\/span> <span class=\"token template-string\"><span class=\"token template-punctuation string\">&#096;<\/span><span class=\"token string\">{table_name}<\/span><span class=\"token template-punctuation string\">&#096;<\/span><\/span><br \/>\n        <span class=\"token string\">&#034;&#034;<\/span>&#034;<\/p>\n<p>        cursor<span class=\"token punctuation\">.<\/span><span class=\"token function\">execute<\/span><span class=\"token punctuation\">(<\/span>query<span class=\"token punctuation\">)<\/span><br \/>\n        result <span class=\"token operator\">&#061;<\/span> cursor<span class=\"token punctuation\">.<\/span><span class=\"token function\">fetchone<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span>result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;hash&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> row_count<span class=\"token punctuation\">)<\/span><\/p>\n<p>    except Exception <span class=\"token keyword\">as<\/span> e<span class=\"token operator\">:<\/span><br \/>\n        logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">error<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;\u83b7\u53d6\u8868 {table_name} \u54c8\u5e0c\u5931\u8d25: {e}&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> None<span class=\"token punctuation\">,<\/span> <span class=\"token number\">0<\/span><\/p>\n<p>def <span class=\"token function\">compare_databases<\/span><span class=\"token punctuation\">(<\/span>db1_config<span class=\"token operator\">:<\/span> Dict<span class=\"token punctuation\">,<\/span> db2_config<span class=\"token operator\">:<\/span> Dict<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span><span class=\"token operator\">&gt;<\/span> Dict<span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token string\">&#034;&#034;<\/span><span class=\"token string\">&#034;\u6bd4\u8f83\u4e24\u4e2a\u6570\u636e\u5e93\u7684\u7ed3\u6784\u548c\u6570\u636e&#034;<\/span><span class=\"token string\">&#034;&#034;<\/span><br \/>\n    result <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token string\">&#034;status&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;success&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#034;message&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#034;details&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;structure&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;data&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;tables&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;identical_tables&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span>  # \u65b0\u589e&#xff1a;\u5b8c\u5168\u76f8\u540c\u7684\u8868\u5217\u8868<br \/>\n            <span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token string\">&#034;total_tables&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token string\">&#034;tables_with_structure_diff&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token string\">&#034;tables_with_data_diff&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token string\">&#034;tables_missing&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token string\">&#034;tables_identical&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span>  # \u5b8c\u5168\u76f8\u540c\u8868\u7684\u6570\u91cf<br \/>\n                <span class=\"token string\">&#034;tables_with_differences&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span>  # \u6709\u5dee\u5f02\u8868\u7684\u6570\u91cf<br \/>\n                <span class=\"token string\">&#034;tables_only_in_db1&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span>  # \u4ec5\u5728db1\u4e2d\u5b58\u5728\u7684\u8868<br \/>\n                <span class=\"token string\">&#034;tables_only_in_db2&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span>  # \u4ec5\u5728db2\u4e2d\u5b58\u5728\u7684\u8868<br \/>\n                <span class=\"token string\">&#034;tables_compared&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">,<\/span>  # \u5b9e\u9645\u6bd4\u8f83\u7684\u8868\u6570\u91cf<br \/>\n                <span class=\"token string\">&#034;start_time&#034;<\/span><span class=\"token operator\">:<\/span> datetime<span class=\"token punctuation\">.<\/span><span class=\"token function\">now<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">strftime<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;%Y-%m-%d %H:%M:%S&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token string\">&#034;end_time&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token string\">&#034;duration&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;&#034;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#034;logs&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    def <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>message<span class=\"token operator\">:<\/span> str<span class=\"token punctuation\">,<\/span> level<span class=\"token operator\">:<\/span> str <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;info&#034;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span><br \/>\n        <span class=\"token string\">&#034;&#034;<\/span><span class=\"token string\">&#034;\u6dfb\u52a0\u65e5\u5fd7\u5230\u7ed3\u679c\u548c\u63a7\u5236\u53f0&#034;<\/span><span class=\"token string\">&#034;&#034;<\/span><br \/>\n        timestamp <span class=\"token operator\">&#061;<\/span> datetime<span class=\"token punctuation\">.<\/span><span class=\"token function\">now<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">strftime<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;%H:%M:%S&#039;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        log_msg <span class=\"token operator\">&#061;<\/span> f<span class=\"token string\">&#034;[{timestamp}] {message}&#034;<\/span><br \/>\n        result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;logs&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span>log_msg<span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">if<\/span> level <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;error&#034;<\/span><span class=\"token operator\">:<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">error<\/span><span class=\"token punctuation\">(<\/span>log_msg<span class=\"token punctuation\">)<\/span><br \/>\n        elif level <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;warning&#034;<\/span><span class=\"token operator\">:<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">warning<\/span><span class=\"token punctuation\">(<\/span>log_msg<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">else<\/span><span class=\"token operator\">:<\/span><br \/>\n            logger<span class=\"token punctuation\">.<\/span><span class=\"token function\">info<\/span><span class=\"token punctuation\">(<\/span>log_msg<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> log_msg<\/p>\n<p>    db1 <span class=\"token operator\">&#061;<\/span> db2 <span class=\"token operator\">&#061;<\/span> None<br \/>\n    start_time <span class=\"token operator\">&#061;<\/span> datetime<span class=\"token punctuation\">.<\/span><span class=\"token function\">now<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">try<\/span><span class=\"token operator\">:<\/span><br \/>\n        <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5f00\u59cb\u6570\u636e\u5e93\u5bf9\u6bd4\u4efb\u52a1&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;\u6570\u636e\u5e931\u914d\u7f6e: {db1_config[&#039;host&#039;]}:{db1_config[&#039;port&#039;]}\/{db1_config[&#039;database&#039;]}&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;\u6570\u636e\u5e932\u914d\u7f6e: {db2_config[&#039;host&#039;]}:{db2_config[&#039;port&#039;]}\/{db2_config[&#039;database&#039;]}&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        # \u8fde\u63a5\u6570\u636e\u5e93<br \/>\n        <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6b63\u5728\u8fde\u63a5\u6570\u636e\u5e93&#8230;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        db1 <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">get_db_connection<\/span><span class=\"token punctuation\">(<\/span>db1_config<span class=\"token punctuation\">)<\/span><br \/>\n        db2 <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">get_db_connection<\/span><span class=\"token punctuation\">(<\/span>db2_config<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6570\u636e\u5e93\u8fde\u63a5\u6210\u529f&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">with<\/span> db1<span class=\"token punctuation\">.<\/span><span class=\"token function\">cursor<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> cursor1<span class=\"token punctuation\">,<\/span> db2<span class=\"token punctuation\">.<\/span><span class=\"token function\">cursor<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">as<\/span> cursor2<span class=\"token operator\">:<\/span><br \/>\n            # \u83b7\u53d6\u6240\u6709\u8868\u540d<br \/>\n            cursor1<span class=\"token punctuation\">.<\/span><span class=\"token function\">execute<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;SHOW TABLES&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            tables1 <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token function\">list<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">.<\/span><span class=\"token function\">values<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">lower<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">for<\/span> t <span class=\"token keyword\">in<\/span> cursor1<span class=\"token punctuation\">.<\/span><span class=\"token function\">fetchall<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span><br \/>\n            cursor2<span class=\"token punctuation\">.<\/span><span class=\"token function\">execute<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;SHOW TABLES&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            tables2 <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token function\">list<\/span><span class=\"token punctuation\">(<\/span>t<span class=\"token punctuation\">.<\/span><span class=\"token function\">values<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">lower<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">for<\/span> t <span class=\"token keyword\">in<\/span> cursor2<span class=\"token punctuation\">.<\/span><span class=\"token function\">fetchall<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">]<\/span><\/p>\n<p>            all_tables <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>tables1 <span class=\"token operator\">&#043;<\/span> tables2<span class=\"token punctuation\">)<\/span><br \/>\n            result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;total_tables&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">len<\/span><span class=\"token punctuation\">(<\/span>all_tables<span class=\"token punctuation\">)<\/span><br \/>\n            result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables_only_in_db1&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">len<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>tables1<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>tables2<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables_only_in_db2&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">len<\/span><span class=\"token punctuation\">(<\/span><span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>tables2<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>tables1<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;\u6570\u636e\u5e931\u6709 {len(tables1)} \u4e2a\u8868&#xff0c;\u6570\u636e\u5e932\u6709 {len(tables2)} \u4e2a\u8868&#xff0c;\u5171 {len(all_tables)} \u4e2a\u552f\u4e00\u8868&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>            # \u8868\u5b58\u5728\u6027\u68c0\u67e5<br \/>\n            <span class=\"token keyword\">for<\/span> table <span class=\"token keyword\">in<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>tables1<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>tables2<span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span><br \/>\n                issue_msg <span class=\"token operator\">&#061;<\/span> f<span class=\"token string\">&#034;\u8868 {table} \u4e0d\u5b58\u5728\u4e8e\u6570\u636e\u5e932&#034;<\/span><br \/>\n                result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                    <span class=\"token string\">&#034;table&#034;<\/span><span class=\"token operator\">:<\/span> table<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;issues&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                        <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;table&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;message&#034;<\/span><span class=\"token operator\">:<\/span> issue_msg<span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;severity&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;high&#034;<\/span><br \/>\n                    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">]<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>issue_msg<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;warning&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>            <span class=\"token keyword\">for<\/span> table <span class=\"token keyword\">in<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>tables2<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>tables1<span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span><br \/>\n                issue_msg <span class=\"token operator\">&#061;<\/span> f<span class=\"token string\">&#034;\u8868 {table} \u4e0d\u5b58\u5728\u4e8e\u6570\u636e\u5e931&#034;<\/span><br \/>\n                result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                    <span class=\"token string\">&#034;table&#034;<\/span><span class=\"token operator\">:<\/span> table<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;issues&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                        <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;table&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;message&#034;<\/span><span class=\"token operator\">:<\/span> issue_msg<span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;severity&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;high&#034;<\/span><br \/>\n                    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">]<\/span><br \/>\n                <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>issue_msg<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;warning&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>            # \u83b7\u53d6\u8868\u7ed3\u6784<br \/>\n            <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6b63\u5728\u83b7\u53d6\u6570\u636e\u5e93\u8868\u7ed3\u6784&#8230;&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            structure1 <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">get_table_structure<\/span><span class=\"token punctuation\">(<\/span>cursor1<span class=\"token punctuation\">,<\/span> db1_config<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;database&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            structure2 <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">get_table_structure<\/span><span class=\"token punctuation\">(<\/span>cursor2<span class=\"token punctuation\">,<\/span> db2_config<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;database&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>            # \u8f6c\u6362\u4e3a\u5b57\u5178\u4fbf\u4e8e\u67e5\u627e<br \/>\n            db1_fields <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token punctuation\">(<\/span>row<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;TABLE_NAME&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">lower<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;COLUMN_NAME&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">lower<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span> row<br \/>\n                <span class=\"token keyword\">for<\/span> row <span class=\"token keyword\">in<\/span> structure1<br \/>\n            <span class=\"token punctuation\">}<\/span><br \/>\n            db2_fields <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token punctuation\">(<\/span>row<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;TABLE_NAME&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">lower<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> row<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;COLUMN_NAME&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">lower<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span> row<br \/>\n                <span class=\"token keyword\">for<\/span> row <span class=\"token keyword\">in<\/span> structure2<br \/>\n            <span class=\"token punctuation\">}<\/span><\/p>\n<p>            # \u6bd4\u8f83\u5171\u6709\u8868<br \/>\n            common_tables <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>tables1<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&amp;<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>tables2<span class=\"token punctuation\">)<\/span><br \/>\n            result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables_compared&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">len<\/span><span class=\"token punctuation\">(<\/span>common_tables<span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;\u5171 {len(common_tables)} \u4e2a\u8868\u9700\u8981\u6bd4\u8f83\u7ed3\u6784\u548c\u6570\u636e&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>            <span class=\"token keyword\">for<\/span> table_idx<span class=\"token punctuation\">,<\/span> table <span class=\"token keyword\">in<\/span> <span class=\"token function\">enumerate<\/span><span class=\"token punctuation\">(<\/span>common_tables<span class=\"token punctuation\">,<\/span> <span class=\"token number\">1<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span><br \/>\n                table_result <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                    <span class=\"token string\">&#034;table&#034;<\/span><span class=\"token operator\">:<\/span> table<span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;structure_issues&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;data_issues&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                    <span class=\"token string\">&#034;is_identical&#034;<\/span><span class=\"token operator\">:<\/span> True<br \/>\n                <span class=\"token punctuation\">}<\/span><\/p>\n<p>                <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;\u6b63\u5728\u6bd4\u8f83\u8868 ({table_idx}\/{len(common_tables)}): {table}&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>                # \u6bd4\u8f83\u8868\u7ed3\u6784<br \/>\n                db1_table_fields <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span>k<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">:<\/span> v <span class=\"token keyword\">for<\/span> k<span class=\"token punctuation\">,<\/span> v <span class=\"token keyword\">in<\/span> db1_fields<span class=\"token punctuation\">.<\/span><span class=\"token function\">items<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">if<\/span> k<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;&#061;<\/span> table<span class=\"token punctuation\">}<\/span><br \/>\n                db2_table_fields <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span>k<span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">:<\/span> v <span class=\"token keyword\">for<\/span> k<span class=\"token punctuation\">,<\/span> v <span class=\"token keyword\">in<\/span> db2_fields<span class=\"token punctuation\">.<\/span><span class=\"token function\">items<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">if<\/span> k<span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;&#061;<\/span> table<span class=\"token punctuation\">}<\/span><\/p>\n<p>                # \u68c0\u67e5\u5b57\u6bb5\u5b58\u5728\u6027<br \/>\n                <span class=\"token keyword\">for<\/span> field <span class=\"token keyword\">in<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>db1_table_fields<span class=\"token punctuation\">.<\/span><span class=\"token function\">keys<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>db2_table_fields<span class=\"token punctuation\">.<\/span><span class=\"token function\">keys<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span><br \/>\n                    issue_msg <span class=\"token operator\">&#061;<\/span> f<span class=\"token string\">&#034;\u8868 {table} \u5b57\u6bb5 {field} \u4e0d\u5b58\u5728\u4e8e\u6570\u636e\u5e932&#034;<\/span><br \/>\n                    table_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;structure_issues&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                        <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;structure&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;field&#034;<\/span><span class=\"token operator\">:<\/span> field<span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;message&#034;<\/span><span class=\"token operator\">:<\/span> issue_msg<span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;db1_type&#034;<\/span><span class=\"token operator\">:<\/span> db1_table_fields<span class=\"token punctuation\">[<\/span>field<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;DATA_TYPE&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;db2_type&#034;<\/span><span class=\"token operator\">:<\/span> None<br \/>\n                    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                    table_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;is_identical&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> False<br \/>\n                    <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>issue_msg<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;warning&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>                <span class=\"token keyword\">for<\/span> field <span class=\"token keyword\">in<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>db2_table_fields<span class=\"token punctuation\">.<\/span><span class=\"token function\">keys<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>db1_table_fields<span class=\"token punctuation\">.<\/span><span class=\"token function\">keys<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span><br \/>\n                    issue_msg <span class=\"token operator\">&#061;<\/span> f<span class=\"token string\">&#034;\u8868 {table} \u5b57\u6bb5 {field} \u4e0d\u5b58\u5728\u4e8e\u6570\u636e\u5e931&#034;<\/span><br \/>\n                    table_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;structure_issues&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                        <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;structure&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;field&#034;<\/span><span class=\"token operator\">:<\/span> field<span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;message&#034;<\/span><span class=\"token operator\">:<\/span> issue_msg<span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;db1_type&#034;<\/span><span class=\"token operator\">:<\/span> None<span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;db2_type&#034;<\/span><span class=\"token operator\">:<\/span> db2_table_fields<span class=\"token punctuation\">[<\/span>field<span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;DATA_TYPE&#039;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n                    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                    table_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;is_identical&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> False<br \/>\n                    <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>issue_msg<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;warning&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>                # \u6bd4\u8f83\u5171\u6709\u5b57\u6bb5<br \/>\n                common_fields <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>db1_table_fields<span class=\"token punctuation\">.<\/span><span class=\"token function\">keys<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&amp;<\/span> <span class=\"token function\">set<\/span><span class=\"token punctuation\">(<\/span>db2_table_fields<span class=\"token punctuation\">.<\/span><span class=\"token function\">keys<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">for<\/span> field <span class=\"token keyword\">in<\/span> common_fields<span class=\"token operator\">:<\/span><br \/>\n                    col1 <span class=\"token operator\">&#061;<\/span> db1_table_fields<span class=\"token punctuation\">[<\/span>field<span class=\"token punctuation\">]<\/span><br \/>\n                    col2 <span class=\"token operator\">&#061;<\/span> db2_table_fields<span class=\"token punctuation\">[<\/span>field<span class=\"token punctuation\">]<\/span><\/p>\n<p>                    <span class=\"token keyword\">if<\/span> not <span class=\"token function\">compare_columns<\/span><span class=\"token punctuation\">(<\/span>col1<span class=\"token punctuation\">,<\/span> col2<span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span><br \/>\n                        differences <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">get_column_diff_details<\/span><span class=\"token punctuation\">(<\/span>col1<span class=\"token punctuation\">,<\/span> col2<span class=\"token punctuation\">)<\/span><br \/>\n                        issue_msg <span class=\"token operator\">&#061;<\/span> f<span class=\"token string\">&#034;\u8868 {table} \u5b57\u6bb5 {field} \u5c5e\u6027\u4e0d\u4e00\u81f4: {&#039;, &#039;.join(differences)}&#034;<\/span><br \/>\n                        table_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;structure_issues&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                            <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;structure&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                            <span class=\"token string\">&#034;field&#034;<\/span><span class=\"token operator\">:<\/span> field<span class=\"token punctuation\">,<\/span><br \/>\n                            <span class=\"token string\">&#034;message&#034;<\/span><span class=\"token operator\">:<\/span> issue_msg<span class=\"token punctuation\">,<\/span><br \/>\n                            <span class=\"token string\">&#034;db1_type&#034;<\/span><span class=\"token operator\">:<\/span> col1<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;DATA_TYPE&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                            <span class=\"token string\">&#034;db2_type&#034;<\/span><span class=\"token operator\">:<\/span> col2<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;DATA_TYPE&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                            <span class=\"token string\">&#034;details&#034;<\/span><span class=\"token operator\">:<\/span> differences<br \/>\n                        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                        table_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;is_identical&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> False<br \/>\n                        <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>issue_msg<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;warning&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>                # \u6bd4\u8f83\u8868\u6570\u636e<br \/>\n                hash1<span class=\"token punctuation\">,<\/span> row_count1 <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">get_table_hash<\/span><span class=\"token punctuation\">(<\/span>cursor1<span class=\"token punctuation\">,<\/span> table<span class=\"token punctuation\">)<\/span><br \/>\n                hash2<span class=\"token punctuation\">,<\/span> row_count2 <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">get_table_hash<\/span><span class=\"token punctuation\">(<\/span>cursor2<span class=\"token punctuation\">,<\/span> table<span class=\"token punctuation\">)<\/span><\/p>\n<p>                <span class=\"token keyword\">if<\/span> hash1 <span class=\"token operator\">!&#061;<\/span> hash2 or row_count1 <span class=\"token operator\">!&#061;<\/span> row_count2<span class=\"token operator\">:<\/span><br \/>\n                    issue_details <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n                        <span class=\"token string\">&#034;type&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;data&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;message&#034;<\/span><span class=\"token operator\">:<\/span> f<span class=\"token string\">&#034;\u8868 {table} \u6570\u636e\u4e0d\u4e00\u81f4&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;db1_row_count&#034;<\/span><span class=\"token operator\">:<\/span> row_count1<span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;db2_row_count&#034;<\/span><span class=\"token operator\">:<\/span> row_count2<span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;db1_hash&#034;<\/span><span class=\"token operator\">:<\/span> hash1<span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;db2_hash&#034;<\/span><span class=\"token operator\">:<\/span> hash2<span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;severity&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;medium&#034;<\/span><br \/>\n                    <span class=\"token punctuation\">}<\/span><\/p>\n<p>                    <span class=\"token keyword\">if<\/span> row_count1 <span class=\"token operator\">!&#061;<\/span> row_count2<span class=\"token operator\">:<\/span><br \/>\n                        issue_details<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;message&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;&#061;<\/span> f<span class=\"token string\">&#034; (\u884c\u6570\u4e0d\u540c: {row_count1} vs {row_count2})&#034;<\/span><br \/>\n                    <span class=\"token keyword\">else<\/span><span class=\"token operator\">:<\/span><br \/>\n                        issue_details<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;message&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token string\">&#034; (\u884c\u6570\u76f8\u540c\u4f46\u5185\u5bb9\u4e0d\u540c)&#034;<\/span><\/p>\n<p>                    table_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;data_issues&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span>issue_details<span class=\"token punctuation\">)<\/span><br \/>\n                    table_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;is_identical&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> False<br \/>\n                    <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>issue_details<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;message&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;warning&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                <span class=\"token keyword\">else<\/span><span class=\"token operator\">:<\/span><br \/>\n                    <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;\u8868 {table} \u6570\u636e\u4e00\u81f4 (\u884c\u6570: {row_count1})&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>                # \u8bb0\u5f55\u7ed3\u679c<br \/>\n                <span class=\"token keyword\">if<\/span> table_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;structure_issues&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">:<\/span><br \/>\n                    result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;structure&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                        <span class=\"token string\">&#034;table&#034;<\/span><span class=\"token operator\">:<\/span> table<span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;issues&#034;<\/span><span class=\"token operator\">:<\/span> table_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;structure_issues&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n                    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                    result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables_with_structure_diff&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token number\">1<\/span><\/p>\n<p>                <span class=\"token keyword\">if<\/span> table_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;data_issues&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">:<\/span><br \/>\n                    result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;data&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                        <span class=\"token string\">&#034;table&#034;<\/span><span class=\"token operator\">:<\/span> table<span class=\"token punctuation\">,<\/span><br \/>\n                        <span class=\"token string\">&#034;issues&#034;<\/span><span class=\"token operator\">:<\/span> table_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;data_issues&#034;<\/span><span class=\"token punctuation\">]<\/span><br \/>\n                    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><br \/>\n                    result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables_with_data_diff&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token number\">1<\/span><\/p>\n<p>                <span class=\"token keyword\">if<\/span> table_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;is_identical&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">:<\/span><br \/>\n                    result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;identical_tables&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span>table<span class=\"token punctuation\">)<\/span><br \/>\n                    result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables_identical&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token number\">1<\/span><br \/>\n                <span class=\"token keyword\">else<\/span><span class=\"token operator\">:<\/span><br \/>\n                    result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables_with_differences&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#043;&#061;<\/span> <span class=\"token number\">1<\/span><\/p>\n<p>        # \u8ba1\u7b97\u8017\u65f6<br \/>\n        end_time <span class=\"token operator\">&#061;<\/span> datetime<span class=\"token punctuation\">.<\/span><span class=\"token function\">now<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        duration <span class=\"token operator\">&#061;<\/span> end_time <span class=\"token operator\">&#8211;<\/span> start_time<br \/>\n        result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;end_time&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> end_time<span class=\"token punctuation\">.<\/span><span class=\"token function\">strftime<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;%Y-%m-%d %H:%M:%S&#039;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;duration&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">str<\/span><span class=\"token punctuation\">(<\/span>duration<span class=\"token punctuation\">)<\/span><\/p>\n<p>        # \u6c47\u603b\u7ed3\u679c\u6d88\u606f<br \/>\n        has_differences <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><br \/>\n                result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables_with_structure_diff&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span> or<br \/>\n                result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables_with_data_diff&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span> or<br \/>\n                result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables_missing&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><br \/>\n        <span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token keyword\">if<\/span> has_differences<span class=\"token operator\">:<\/span><br \/>\n            diff_details <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables_missing&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><span class=\"token operator\">:<\/span><br \/>\n                diff_details<span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;{result[&#039;details&#039;][&#039;summary&#039;][&#039;tables_missing&#039;]}\u4e2a\u8868\u7f3a\u5931&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables_with_structure_diff&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><span class=\"token operator\">:<\/span><br \/>\n                diff_details<span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;{result[&#039;details&#039;][&#039;summary&#039;][&#039;tables_with_structure_diff&#039;]}\u4e2a\u8868\u7ed3\u6784\u4e0d\u540c&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token keyword\">if<\/span> result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;tables_with_data_diff&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><span class=\"token operator\">:<\/span><br \/>\n                diff_details<span class=\"token punctuation\">.<\/span><span class=\"token function\">append<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;{result[&#039;details&#039;][&#039;summary&#039;][&#039;tables_with_data_diff&#039;]}\u4e2a\u8868\u6570\u636e\u4e0d\u540c&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>            final_msg <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><br \/>\n                f<span class=\"token string\">&#034;\u5bf9\u6bd4\u5b8c\u6210&#xff0c;\u5171\u6bd4\u8f83 {result[&#039;details&#039;][&#039;summary&#039;][&#039;tables_compared&#039;]} \u4e2a\u8868\u3002&#034;<\/span><br \/>\n                f<span class=\"token string\">&#034;\u53d1\u73b0\u5dee\u5f02: {&#039;, &#039;.join(diff_details)}\u3002&#034;<\/span><br \/>\n                f<span class=\"token string\">&#034;\u5b8c\u5168\u76f8\u540c\u8868: {result[&#039;details&#039;][&#039;summary&#039;][&#039;tables_identical&#039;]} \u4e2a\u3002&#034;<\/span><br \/>\n                f<span class=\"token string\">&#034;\u8017\u65f6: {duration}&#034;<\/span><br \/>\n            <span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">else<\/span><span class=\"token operator\">:<\/span><br \/>\n            final_msg <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><br \/>\n                f<span class=\"token string\">&#034;\u6570\u636e\u5e93\u5b8c\u5168\u4e00\u81f4&#xff0c;\u5171 {result[&#039;details&#039;][&#039;summary&#039;][&#039;tables_identical&#039;]} \u4e2a\u8868\u5b8c\u5168\u76f8\u540c\u3002&#034;<\/span><br \/>\n                f<span class=\"token string\">&#034;\u8017\u65f6: {duration}&#034;<\/span><br \/>\n            <span class=\"token punctuation\">)<\/span><\/p>\n<p>        <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>final_msg<span class=\"token punctuation\">)<\/span><br \/>\n        result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;message&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> final_msg<\/p>\n<p>    except pymysql<span class=\"token punctuation\">.<\/span>Error <span class=\"token keyword\">as<\/span> e<span class=\"token operator\">:<\/span><br \/>\n        error_msg <span class=\"token operator\">&#061;<\/span> f<span class=\"token string\">&#034;\u6570\u636e\u5e93\u9519\u8bef: {str(e)}&#034;<\/span><br \/>\n        <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>error_msg<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;error&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;error&#034;<\/span><br \/>\n        result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;message&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> error_msg<br \/>\n    except Exception <span class=\"token keyword\">as<\/span> e<span class=\"token operator\">:<\/span><br \/>\n        error_msg <span class=\"token operator\">&#061;<\/span> f<span class=\"token string\">&#034;\u7cfb\u7edf\u9519\u8bef: {str(e)}&#034;<\/span><br \/>\n        <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span>error_msg<span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;error&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;status&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#034;error&#034;<\/span><br \/>\n        result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;message&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> error_msg<br \/>\n    finally<span class=\"token operator\">:<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> db1<span class=\"token operator\">:<\/span><br \/>\n            db1<span class=\"token punctuation\">.<\/span><span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6570\u636e\u5e931\u8fde\u63a5\u5df2\u5173\u95ed&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> db2<span class=\"token operator\">:<\/span><br \/>\n            db2<span class=\"token punctuation\">.<\/span><span class=\"token function\">close<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n            <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u6570\u636e\u5e932\u8fde\u63a5\u5df2\u5173\u95ed&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>        result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;end_time&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> datetime<span class=\"token punctuation\">.<\/span><span class=\"token function\">now<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">strftime<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;%Y-%m-%d %H:%M:%S&#039;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        duration <span class=\"token operator\">&#061;<\/span> datetime<span class=\"token punctuation\">.<\/span><span class=\"token function\">now<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#8211;<\/span> start_time<br \/>\n        result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;duration&#034;<\/span><span class=\"token punctuation\">]<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">str<\/span><span class=\"token punctuation\">(<\/span>duration<span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token function\">add_log<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\u5bf9\u6bd4\u4efb\u52a1\u7ed3\u675f&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token function\">print<\/span><span class=\"token punctuation\">(<\/span>result<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">return<\/span> result<\/p>\n<p># \u793a\u4f8b\u7528\u6cd5<br \/>\n<span class=\"token keyword\">if<\/span> __name__ <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#034;__main__&#034;<\/span><span class=\"token operator\">:<\/span><br \/>\n    db1_config <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token string\">&#039;host&#039;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;localhost&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#039;port&#039;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">3306<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#039;user&#039;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;root&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#039;password&#039;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;password&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#039;database&#039;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;database1&#039;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    db2_config <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        <span class=\"token string\">&#039;host&#039;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;localhost&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#039;port&#039;<\/span><span class=\"token operator\">:<\/span> <span class=\"token number\">3306<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#039;user&#039;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;root&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#039;password&#039;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;password&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n        <span class=\"token string\">&#039;database&#039;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;database2&#039;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><\/p>\n<p>    comparison_result <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">compare_databases<\/span><span class=\"token punctuation\">(<\/span>db1_config<span class=\"token punctuation\">,<\/span> db2_config<span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token function\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n\u5bf9\u6bd4\u7ed3\u679c:&#034;<\/span><span class=\"token punctuation\">,<\/span> comparison_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;message&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token function\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n\u8be6\u7ec6\u6458\u8981:&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">for<\/span> k<span class=\"token punctuation\">,<\/span> v <span class=\"token keyword\">in<\/span> comparison_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;summary&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">items<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span><br \/>\n        <span class=\"token function\">print<\/span><span class=\"token punctuation\">(<\/span>f<span class=\"token string\">&#034;{k}: {v}&#034;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> comparison_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;identical_tables&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token operator\">:<\/span><br \/>\n        <span class=\"token function\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;\\\\n\u5b8c\u5168\u76f8\u540c\u8868:&#034;<\/span><span class=\"token punctuation\">,<\/span> comparison_result<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;details&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;identical_tables&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<h3>api\/routes\/db_compare_routes.py<\/h3>\n<p><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> Blueprint<span class=\"token punctuation\">,<\/span> request<span class=\"token punctuation\">,<\/span> jsonify<br \/>\n<span class=\"token keyword\">from<\/span> api<span class=\"token punctuation\">.<\/span>daos<span class=\"token punctuation\">.<\/span>db_compare_dao <span class=\"token keyword\">import<\/span> compare_databases<\/p>\n<p>db_compare_bp <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">Blueprint<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;db_compare&#039;<\/span><span class=\"token punctuation\">,<\/span> __name__<span class=\"token punctuation\">)<\/span><\/p>\n<p>&#064;db_compare_bp<span class=\"token punctuation\">.<\/span><span class=\"token function\">route<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\/compare&#039;<\/span><span class=\"token punctuation\">,<\/span> methods<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">[<\/span><span class=\"token string\">&#039;POST&#039;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><br \/>\ndef <span class=\"token function\">compare<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token function\">print<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;jinlaile&#039;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    <span class=\"token keyword\">try<\/span><span class=\"token operator\">:<\/span><br \/>\n        data <span class=\"token operator\">&#061;<\/span> request<span class=\"token punctuation\">.<\/span><span class=\"token function\">get_json<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> not data<span class=\"token operator\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token function\">jsonify<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token string\">&#034;status&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;error&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token string\">&#034;message&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;No JSON data provided&#034;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">400<\/span><\/p>\n<p>        # \u63d0\u53d6\u5e76\u9a8c\u8bc1\u5fc5\u8981\u53c2\u6570<br \/>\n        required_fields <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span><br \/>\n            <span class=\"token string\">&#039;db1_host&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;db1_user&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;db1_password&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;db1_database&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#039;db2_host&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;db2_user&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;db2_password&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#039;db2_database&#039;<\/span><br \/>\n        <span class=\"token punctuation\">]<\/span><\/p>\n<p>        missing_fields <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">[<\/span>field <span class=\"token keyword\">for<\/span> field <span class=\"token keyword\">in<\/span> required_fields <span class=\"token keyword\">if<\/span> field not <span class=\"token keyword\">in<\/span> data<span class=\"token punctuation\">]<\/span><br \/>\n        <span class=\"token keyword\">if<\/span> missing_fields<span class=\"token operator\">:<\/span><br \/>\n            <span class=\"token keyword\">return<\/span> <span class=\"token function\">jsonify<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n                <span class=\"token string\">&#034;status&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;error&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n                <span class=\"token string\">&#034;message&#034;<\/span><span class=\"token operator\">:<\/span> f<span class=\"token string\">&#034;Missing required fields: {&#039;, &#039;.join(missing_fields)}&#034;<\/span><br \/>\n            <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">400<\/span><\/p>\n<p>        # \u6784\u5efa\u914d\u7f6e\u5b57\u5178<br \/>\n        db1_config <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;host&#034;<\/span><span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;db1_host&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;user&#034;<\/span><span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;db1_user&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;password&#034;<\/span><span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;db1_password&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;database&#034;<\/span><span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;db1_database&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;port&#034;<\/span><span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;db1_port&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3306<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;charset&#034;<\/span><span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;db1_charset&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;utf8mb4&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        db2_config <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;host&#034;<\/span><span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;db2_host&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;user&#034;<\/span><span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;db2_user&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;password&#034;<\/span><span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;db2_password&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;database&#034;<\/span><span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">[<\/span><span class=\"token string\">&#034;db2_database&#034;<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;port&#034;<\/span><span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;db2_port&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">3306<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;charset&#034;<\/span><span class=\"token operator\">:<\/span> data<span class=\"token punctuation\">.<\/span><span class=\"token function\">get<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#034;db2_charset&#034;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token string\">&#034;utf8mb4&#034;<\/span><span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><\/p>\n<p>        # \u6267\u884c\u6bd4\u8f83<br \/>\n        result <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">compare_databases<\/span><span class=\"token punctuation\">(<\/span>db1_config<span class=\"token punctuation\">,<\/span> db2_config<span class=\"token punctuation\">)<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token function\">jsonify<\/span><span class=\"token punctuation\">(<\/span>result<span class=\"token punctuation\">)<\/span><\/p>\n<p>    except Exception <span class=\"token keyword\">as<\/span> e<span class=\"token operator\">:<\/span><br \/>\n        <span class=\"token keyword\">return<\/span> <span class=\"token function\">jsonify<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n            <span class=\"token string\">&#034;status&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;error&#034;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n            <span class=\"token string\">&#034;message&#034;<\/span><span class=\"token operator\">:<\/span> f<span class=\"token string\">&#034;Internal server error: {str(e)}&#034;<\/span><br \/>\n        <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token number\">500<\/span><\/p>\n<h3>api\/run.py<\/h3>\n<p><span class=\"token keyword\">from<\/span> flask <span class=\"token keyword\">import<\/span> Flask<br \/>\n<span class=\"token keyword\">from<\/span> flask_cors <span class=\"token keyword\">import<\/span> <span class=\"token constant\">CORS<\/span><br \/>\n<span class=\"token keyword\">from<\/span> utils<span class=\"token punctuation\">.<\/span>sqlite_util <span class=\"token keyword\">import<\/span> init_db<br \/>\n<span class=\"token keyword\">from<\/span> routes<span class=\"token punctuation\">.<\/span>user_route <span class=\"token keyword\">import<\/span> bp <span class=\"token keyword\">as<\/span> user_bp<br \/>\n<span class=\"token keyword\">from<\/span> routes<span class=\"token punctuation\">.<\/span>db_compare_routes <span class=\"token keyword\">import<\/span> db_compare_bp   # \u65b0\u589e<\/p>\n<p>app <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">Flask<\/span><span class=\"token punctuation\">(<\/span>__name__<span class=\"token punctuation\">)<\/span><br \/>\n<span class=\"token constant\">CORS<\/span><span class=\"token punctuation\">(<\/span>app<span class=\"token punctuation\">,<\/span> resources<span class=\"token operator\">&#061;<\/span><span class=\"token punctuation\">{<\/span>r<span class=\"token string\">&#034;\/*&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token string\">&#034;origins&#034;<\/span><span class=\"token operator\">:<\/span> <span class=\"token string\">&#034;*&#034;<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>app<span class=\"token punctuation\">.<\/span>config<span class=\"token punctuation\">.<\/span><span class=\"token function\">from_object<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;config.Config&#039;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<p>app<span class=\"token punctuation\">.<\/span><span class=\"token function\">register_blueprint<\/span><span class=\"token punctuation\">(<\/span>user_bp<span class=\"token punctuation\">,<\/span> url_prefix<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;\/api&#039;<\/span><span class=\"token punctuation\">)<\/span><br \/>\napp<span class=\"token punctuation\">.<\/span><span class=\"token function\">register_blueprint<\/span><span class=\"token punctuation\">(<\/span>db_compare_bp<span class=\"token punctuation\">,<\/span> url_prefix<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;\/db&#039;<\/span><span class=\"token punctuation\">)<\/span>    # \u65b0\u589e<\/p>\n<p><span class=\"token keyword\">if<\/span> __name__ <span class=\"token operator\">&#061;&#061;<\/span> <span class=\"token string\">&#039;__main__&#039;<\/span><span class=\"token operator\">:<\/span><br \/>\n    <span class=\"token function\">init_db<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><br \/>\n    app<span class=\"token punctuation\">.<\/span><span class=\"token function\">run<\/span><span class=\"token punctuation\">(<\/span>debug<span class=\"token operator\">&#061;<\/span>True<span class=\"token punctuation\">,<\/span> host<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#039;0.0.0.0&#039;<\/span><span class=\"token punctuation\">)<\/span><\/p>\n<h3>\u540e\u7aef\u542f\u52a8<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/05\/20250519061422-682acc3e1754d.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h2>\u524d\u7aef\u76f8\u5173<\/h2>\n<h3>ui\/views\/DbCompare.vue<\/h3>\n<p>\u8be5\u4ee3\u7801\u5757\u4e2d\u7684\u7b2c244\u884c\u7684\u540e\u7aef\u5730\u5740&#xff0c;\u9700\u4e0e\u4e0a\u56fe\u4e2d\u540e\u7aef\u542f\u52a8\u7684ip:port\u4fdd\u6301\u4e00\u81f4<\/p>\n<p><span class=\"token operator\">&lt;<\/span>template<span class=\"token operator\">&gt;<\/span><br \/>\n  <span class=\"token operator\">&lt;<\/span>div <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;container&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n    <span class=\"token operator\">&lt;<\/span>div <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;header&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n      <span class=\"token operator\">&lt;<\/span>h2<span class=\"token operator\">&gt;<\/span>\u6570\u636e\u5e93\u5bf9\u6bd4\u5de5\u5177<span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>h2<span class=\"token operator\">&gt;<\/span><br \/>\n      <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>button <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;back-button&#034;<\/span> type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;info&#034;<\/span> &#064;click<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;goBack&#034;<\/span> size<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;small&#034;<\/span><span class=\"token operator\">&gt;<\/span>\u8fd4\u56de<span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>button<span class=\"token operator\">&gt;<\/span><br \/>\n    <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><\/p>\n<p>    <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>row <span class=\"token operator\">:<\/span>gutter<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;20&#034;<\/span> <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;db-input-row&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n      <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;12&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n        <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>card <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;db-card&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>div slot<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;header&#034;<\/span> <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;clearfix&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>span<span class=\"token operator\">&gt;<\/span><span class=\"token function\">\u6570\u636e\u5e931<\/span> <span class=\"token punctuation\">(<\/span>\u6e90\u6570\u636e\u5e93<span class=\"token punctuation\">)<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>span<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>form label<span class=\"token operator\">&#8211;<\/span>position<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;top&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>row <span class=\"token operator\">:<\/span>gutter<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;10&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;16&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>input v<span class=\"token operator\">&#8211;<\/span>model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;db1.host&#034;<\/span> placeholder<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4e3b\u673a\u5730\u5740&#xff0c;\u4f8b\u5982: 192.168.1.100&#034;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>input<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;8&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>input v<span class=\"token operator\">&#8211;<\/span>model<span class=\"token punctuation\">.<\/span>number<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;db1.port&#034;<\/span> placeholder<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u7aef\u53e3&#xff0c;\u9ed8\u8ba4: 3306&#034;<\/span> type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;number&#034;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>input<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>row<span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>row <span class=\"token operator\">:<\/span>gutter<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;10&#034;<\/span> <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;form-row&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;8&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>input v<span class=\"token operator\">&#8211;<\/span>model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;db1.user&#034;<\/span> placeholder<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u7528\u6237\u540d&#034;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>input<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;8&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>input v<span class=\"token operator\">&#8211;<\/span>model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;db1.password&#034;<\/span> type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;password&#034;<\/span> placeholder<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5bc6\u7801&#034;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>input<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;8&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>input v<span class=\"token operator\">&#8211;<\/span>model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;db1.database&#034;<\/span> placeholder<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u6570\u636e\u5e93\u540d&#034;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>input<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>row<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>form<span class=\"token operator\">&gt;<\/span><br \/>\n        <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>card<span class=\"token operator\">&gt;<\/span><br \/>\n      <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><\/p>\n<p>      <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;12&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n        <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>card <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;db-card&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>div slot<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;header&#034;<\/span> <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;clearfix&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>span<span class=\"token operator\">&gt;<\/span><span class=\"token function\">\u6570\u636e\u5e932<\/span> <span class=\"token punctuation\">(<\/span>\u76ee\u6807\u6570\u636e\u5e93<span class=\"token punctuation\">)<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>span<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>form label<span class=\"token operator\">&#8211;<\/span>position<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;top&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>row <span class=\"token operator\">:<\/span>gutter<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;10&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;16&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>input v<span class=\"token operator\">&#8211;<\/span>model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;db2.host&#034;<\/span> placeholder<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u4e3b\u673a\u5730\u5740&#xff0c;\u4f8b\u5982: 192.168.1.101&#034;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>input<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;8&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>input v<span class=\"token operator\">&#8211;<\/span>model<span class=\"token punctuation\">.<\/span>number<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;db2.port&#034;<\/span> placeholder<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u7aef\u53e3&#xff0c;\u9ed8\u8ba4: 3306&#034;<\/span> type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;number&#034;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>input<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>row<span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>row <span class=\"token operator\">:<\/span>gutter<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;10&#034;<\/span> <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;form-row&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;8&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>input v<span class=\"token operator\">&#8211;<\/span>model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;db2.user&#034;<\/span> placeholder<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u7528\u6237\u540d&#034;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>input<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;8&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>input v<span class=\"token operator\">&#8211;<\/span>model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;db2.password&#034;<\/span> type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;password&#034;<\/span> placeholder<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5bc6\u7801&#034;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>input<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;8&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>input v<span class=\"token operator\">&#8211;<\/span>model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;db2.database&#034;<\/span> placeholder<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u6570\u636e\u5e93\u540d&#034;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>input<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>row<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>form<span class=\"token operator\">&gt;<\/span><br \/>\n        <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>card<span class=\"token operator\">&gt;<\/span><br \/>\n      <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n    <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>row<span class=\"token operator\">&gt;<\/span><\/p>\n<p>    <span class=\"token operator\">&lt;<\/span>div <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;button-container&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n      <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>button<br \/>\n        type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;primary&#034;<\/span><br \/>\n        &#064;click<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;compareDatabases&#034;<\/span><br \/>\n        <span class=\"token operator\">:<\/span>loading<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;loading&#034;<\/span><br \/>\n        size<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;large&#034;<\/span><br \/>\n      <span class=\"token operator\">&gt;<\/span><br \/>\n        \u5f00\u59cb\u5bf9\u6bd4<br \/>\n      <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>button<span class=\"token operator\">&gt;<\/span><br \/>\n      <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>button<br \/>\n        &#064;click<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;resetForm&#034;<\/span><br \/>\n        size<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;large&#034;<\/span><br \/>\n      <span class=\"token operator\">&gt;<\/span><br \/>\n        \u91cd\u7f6e<br \/>\n      <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>button<span class=\"token operator\">&gt;<\/span><br \/>\n    <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><\/p>\n<p>    <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">!<\/span><span class=\"token operator\">&#8212;<\/span> \u7ed3\u679c\u5c55\u793a\u90e8\u5206\u4fdd\u6301\u4e0d\u53d8 <span class=\"token operator\">&#8212;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n    <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>card <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;result-card&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n      <span class=\"token operator\">&lt;<\/span>h2<span class=\"token operator\">&gt;<\/span>\u5bf9\u6bd4\u7ed3\u679c<span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>h2<span class=\"token operator\">&gt;<\/span><\/p>\n<p>      <span class=\"token operator\">&lt;<\/span>div v<span class=\"token operator\">&#8211;<\/span><span class=\"token keyword\">if<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;errorMessage&#034;<\/span> <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;error-message&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n        <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>alert <span class=\"token operator\">:<\/span>title<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;errorMessage&#034;<\/span> type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;error&#034;<\/span> <span class=\"token operator\">:<\/span>closable<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;false&#034;<\/span> <span class=\"token operator\">\/<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n      <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><\/p>\n<p>      <span class=\"token operator\">&lt;<\/span>div v<span class=\"token operator\">&#8211;<\/span><span class=\"token keyword\">else<\/span><span class=\"token operator\">&#8211;<\/span><span class=\"token keyword\">if<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;rawResponse&#034;<\/span> <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;stats-container&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n        <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>row <span class=\"token operator\">:<\/span>gutter<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;20&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;6&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>statistic title<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u603b\u8868\u6570&#034;<\/span> <span class=\"token operator\">:<\/span>value<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;rawResponse.details.summary.total_tables&#034;<\/span> <span class=\"token operator\">\/<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;6&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>statistic title<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5b8c\u5168\u76f8\u540c\u8868&#034;<\/span> <span class=\"token operator\">:<\/span>value<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;rawResponse.details.summary.tables_identical&#034;<\/span> <span class=\"token operator\">\/<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;6&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>statistic title<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u7ed3\u6784\u5dee\u5f02\u8868&#034;<\/span> <span class=\"token operator\">:<\/span>value<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;rawResponse.details.summary.tables_with_structure_diff&#034;<\/span> <span class=\"token operator\">\/<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>col <span class=\"token operator\">:<\/span>span<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;6&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>statistic title<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u6570\u636e\u5dee\u5f02\u8868&#034;<\/span> <span class=\"token operator\">:<\/span>value<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;rawResponse.details.summary.tables_with_data_diff&#034;<\/span> <span class=\"token operator\">\/<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>col<span class=\"token operator\">&gt;<\/span><br \/>\n        <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>row<span class=\"token operator\">&gt;<\/span><\/p>\n<p>        <span class=\"token operator\">&lt;<\/span>div <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;time-info&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>span<span class=\"token operator\">&gt;<\/span>\u5f00\u59cb\u65f6\u95f4<span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> rawResponse<span class=\"token punctuation\">.<\/span>details<span class=\"token punctuation\">.<\/span>summary<span class=\"token punctuation\">.<\/span>start_time <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>span<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>span<span class=\"token operator\">&gt;<\/span>\u7ed3\u675f\u65f6\u95f4<span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> rawResponse<span class=\"token punctuation\">.<\/span>details<span class=\"token punctuation\">.<\/span>summary<span class=\"token punctuation\">.<\/span>end_time <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>span<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>span<span class=\"token operator\">&gt;<\/span>\u8017\u65f6<span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> rawResponse<span class=\"token punctuation\">.<\/span>details<span class=\"token punctuation\">.<\/span>summary<span class=\"token punctuation\">.<\/span>duration <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>span<span class=\"token operator\">&gt;<\/span><br \/>\n        <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><br \/>\n      <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><\/p>\n<p>      <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>tabs v<span class=\"token operator\">&#8211;<\/span><span class=\"token keyword\">if<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;rawResponse&#034;<\/span> type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;border-card&#034;<\/span> <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;result-tabs&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n        <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>tab<span class=\"token operator\">&#8211;<\/span>pane label<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u6458\u8981&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>div <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;summary-message&#034;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><\/p>\n<p>          <span class=\"token operator\">&lt;<\/span>div v<span class=\"token operator\">&#8211;<\/span><span class=\"token keyword\">if<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;rawResponse.details.identical_tables.length &gt; 0&#034;<\/span> <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;identical-tables&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>h3<span class=\"token operator\">&gt;<\/span><span class=\"token function\">\u5b8c\u5168\u76f8\u540c\u8868<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> rawResponse<span class=\"token punctuation\">.<\/span>details<span class=\"token punctuation\">.<\/span>identical_tables<span class=\"token punctuation\">.<\/span>length <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\u4e2a<span class=\"token punctuation\">)<\/span><span class=\"token operator\">:<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>h3<span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>tag<br \/>\n              v<span class=\"token operator\">&#8211;<\/span><span class=\"token keyword\">for<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;table in rawResponse.details.identical_tables&#034;<\/span><br \/>\n              <span class=\"token operator\">:<\/span>key<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;table&#034;<\/span><br \/>\n              type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;success&#034;<\/span><br \/>\n              <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;table-tag&#034;<\/span><br \/>\n            <span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> table <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>tag<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><br \/>\n        <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>tab<span class=\"token operator\">&#8211;<\/span>pane<span class=\"token operator\">&gt;<\/span><\/p>\n<p>        <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>tab<span class=\"token operator\">&#8211;<\/span>pane label<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u7ed3\u6784\u5dee\u5f02&#034;<\/span> v<span class=\"token operator\">&#8211;<\/span><span class=\"token keyword\">if<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;rawResponse.details.structure.length &gt; 0&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>collapse v<span class=\"token operator\">&#8211;<\/span>model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;activeCollapse&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>collapse<span class=\"token operator\">&#8211;<\/span>item<br \/>\n              v<span class=\"token operator\">&#8211;<\/span><span class=\"token keyword\">for<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;table in rawResponse.details.structure&#034;<\/span><br \/>\n              <span class=\"token operator\">:<\/span>key<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;table.table&#034;<\/span><br \/>\n              <span class=\"token operator\">:<\/span>title<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;&#096;\u8868: ${table.table}&#096;&#034;<\/span><br \/>\n              <span class=\"token operator\">:<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;table.table&#034;<\/span><br \/>\n            <span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span>div v<span class=\"token operator\">&#8211;<\/span><span class=\"token keyword\">for<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;issue in table.issues&#034;<\/span> <span class=\"token operator\">:<\/span>key<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;issue.field&#034;<\/span> <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;issue-item&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>alert<br \/>\n                  <span class=\"token operator\">:<\/span>title<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;&#096;\u5b57\u6bb5 ${issue.field} \u5c5e\u6027\u4e0d\u4e00\u81f4: ${issue.message}&#096;&#034;<\/span><br \/>\n                  type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;warning&#034;<\/span><br \/>\n                  <span class=\"token operator\">:<\/span>closable<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;false&#034;<\/span><br \/>\n                <span class=\"token operator\">\/<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span>div v<span class=\"token operator\">&#8211;<\/span><span class=\"token keyword\">if<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;issue.details&#034;<\/span> <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;issue-details&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                  <span class=\"token operator\">&lt;<\/span>p<span class=\"token operator\">&gt;<\/span>\u3010<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> db1<span class=\"token punctuation\">.<\/span>database <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\u3011\u5e93\u7684\u8868\u3010 <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>table<span class=\"token punctuation\">.<\/span>table<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\u3011\u5b57\u6bb5\u3010 <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>issue<span class=\"token punctuation\">.<\/span>field<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\u3011\u5c5e\u6027\u9ed8\u8ba4\u503c\u4e3a<span class=\"token operator\">:<\/span> \u3010<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>issue<span class=\"token punctuation\">.<\/span>message<span class=\"token punctuation\">.<\/span><span class=\"token function\">split<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;(&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">split<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039; vs &#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\u3011<span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>p<span class=\"token operator\">&gt;<\/span><br \/>\n                  <span class=\"token operator\">&lt;<\/span>p<span class=\"token operator\">&gt;<\/span>\u3010<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> db2<span class=\"token punctuation\">.<\/span>database <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\u3011\u5e93\u7684\u8868\u3010<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>table<span class=\"token punctuation\">.<\/span>table<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\u3011\u5b57\u6bb5\u3010 <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>issue<span class=\"token punctuation\">.<\/span>field<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\u3011\u5c5e\u6027\u9ed8\u8ba4\u503c\u4e3a<span class=\"token operator\">:<\/span> \u3010<span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span>issue<span class=\"token punctuation\">.<\/span>message<span class=\"token punctuation\">.<\/span><span class=\"token function\">split<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;(&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">split<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039; vs &#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">1<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">.<\/span><span class=\"token function\">split<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;)&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">[<\/span><span class=\"token number\">0<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span>\u3011<span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>p<span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>collapse<span class=\"token operator\">&#8211;<\/span>item<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>collapse<span class=\"token operator\">&gt;<\/span><br \/>\n        <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>tab<span class=\"token operator\">&#8211;<\/span>pane<span class=\"token operator\">&gt;<\/span><\/p>\n<p>        <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>tab<span class=\"token operator\">&#8211;<\/span>pane label<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u6570\u636e\u5dee\u5f02&#034;<\/span> v<span class=\"token operator\">&#8211;<\/span><span class=\"token keyword\">if<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;rawResponse.details.data.length &gt; 0&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>collapse v<span class=\"token operator\">&#8211;<\/span>model<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;activeCollapse&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>collapse<span class=\"token operator\">&#8211;<\/span>item<br \/>\n              v<span class=\"token operator\">&#8211;<\/span><span class=\"token keyword\">for<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;table in rawResponse.details.data&#034;<\/span><br \/>\n              <span class=\"token operator\">:<\/span>key<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;table.table&#034;<\/span><br \/>\n              <span class=\"token operator\">:<\/span>title<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;&#096;\u8868: ${table.table}&#096;&#034;<\/span><br \/>\n              <span class=\"token operator\">:<\/span>name<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;table.table&#034;<\/span><br \/>\n            <span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span>div v<span class=\"token operator\">&#8211;<\/span><span class=\"token keyword\">for<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;issue in table.issues&#034;<\/span> <span class=\"token operator\">:<\/span>key<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;issue.message&#034;<\/span> <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;issue-item&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>alert <span class=\"token operator\">:<\/span>title<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;issue.message&#034;<\/span> type<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;error&#034;<\/span> <span class=\"token operator\">:<\/span>closable<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;false&#034;<\/span> <span class=\"token operator\">\/<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span>div <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;data-details&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n                  <span class=\"token operator\">&lt;<\/span>p<span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> db1<span class=\"token punctuation\">.<\/span>database <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span> \u884c\u6570<span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> issue<span class=\"token punctuation\">.<\/span>db1_row_count <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>p<span class=\"token operator\">&gt;<\/span><br \/>\n                  <span class=\"token operator\">&lt;<\/span>p<span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> db2<span class=\"token punctuation\">.<\/span>database <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span> \u884c\u6570<span class=\"token operator\">:<\/span> <span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> issue<span class=\"token punctuation\">.<\/span>db2_row_count <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>p<span class=\"token operator\">&gt;<\/span><br \/>\n                <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><br \/>\n              <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>collapse<span class=\"token operator\">&#8211;<\/span>item<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>collapse<span class=\"token operator\">&gt;<\/span><br \/>\n        <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>tab<span class=\"token operator\">&#8211;<\/span>pane<span class=\"token operator\">&gt;<\/span><\/p>\n<p>        <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>tab<span class=\"token operator\">&#8211;<\/span>pane label<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u5b8c\u6574\u65e5\u5fd7&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span>div <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;full-log-container&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n            <span class=\"token operator\">&lt;<\/span>pre <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;full-log-content&#034;<\/span><span class=\"token operator\">&gt;<\/span><span class=\"token punctuation\">{<\/span><span class=\"token punctuation\">{<\/span> rawResponse<span class=\"token punctuation\">.<\/span>logs<span class=\"token punctuation\">.<\/span><span class=\"token function\">join<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\\\\n&#039;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">}<\/span><span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>pre<span class=\"token operator\">&gt;<\/span><br \/>\n          <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><br \/>\n        <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>tab<span class=\"token operator\">&#8211;<\/span>pane<span class=\"token operator\">&gt;<\/span><br \/>\n      <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>tabs<span class=\"token operator\">&gt;<\/span><\/p>\n<p>      <span class=\"token operator\">&lt;<\/span>div v<span class=\"token operator\">&#8211;<\/span><span class=\"token keyword\">else<\/span> <span class=\"token keyword\">class<\/span><span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;empty-result&#034;<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n        <span class=\"token operator\">&lt;<\/span>el<span class=\"token operator\">&#8211;<\/span>empty description<span class=\"token operator\">&#061;<\/span><span class=\"token string\">&#034;\u6682\u65e0\u5bf9\u6bd4\u7ed3\u679c&#034;<\/span> <span class=\"token operator\">\/<\/span><span class=\"token operator\">&gt;<\/span><br \/>\n      <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><br \/>\n    <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>el<span class=\"token operator\">&#8211;<\/span>card<span class=\"token operator\">&gt;<\/span><br \/>\n  <span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>div<span class=\"token operator\">&gt;<\/span><br \/>\n<span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>template<span class=\"token operator\">&gt;<\/span><\/p>\n<p><span class=\"token operator\">&lt;<\/span>script setup<span class=\"token operator\">&gt;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token punctuation\">{<\/span> ref<span class=\"token punctuation\">,<\/span> computed <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">from<\/span> <span class=\"token string\">&#039;vue&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token punctuation\">{<\/span> useRouter <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">from<\/span> <span class=\"token string\">&#039;vue-router&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> axios <span class=\"token keyword\">from<\/span> <span class=\"token string\">&#039;axios&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">import<\/span> <span class=\"token punctuation\">{<\/span> ElMessage <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">from<\/span> <span class=\"token string\">&#039;element-plus&#039;<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">const<\/span> router <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">useRouter<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">const<\/span> <span class=\"token function-variable function\">goBack<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&gt;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  router<span class=\"token punctuation\">.<\/span><span class=\"token function\">push<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\/dashboard&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token comment\">\/\/ \u6570\u636e\u5e93\u8fde\u63a5\u4fe1\u606f<\/span><br \/>\n<span class=\"token keyword\">const<\/span> db1 <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">ref<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n  host<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  port<span class=\"token operator\">:<\/span> <span class=\"token number\">3306<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  user<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;root&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  password<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  database<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;&#039;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">const<\/span> db2 <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">ref<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">{<\/span><br \/>\n  host<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  port<span class=\"token operator\">:<\/span> <span class=\"token number\">3306<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  user<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;root&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  password<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n  database<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;&#039;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">const<\/span> loading <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">ref<\/span><span class=\"token punctuation\">(<\/span><span class=\"token boolean\">false<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">const<\/span> rawResponse <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">ref<\/span><span class=\"token punctuation\">(<\/span><span class=\"token keyword\">null<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">const<\/span> errorMessage <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">ref<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token keyword\">const<\/span> activeCollapse <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">ref<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">[<\/span><span class=\"token punctuation\">]<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">const<\/span> hasDiscrepancy <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">computed<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&gt;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>rawResponse<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">)<\/span> <span class=\"token keyword\">return<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">return<\/span> <span class=\"token punctuation\">(<\/span><br \/>\n    rawResponse<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>details<span class=\"token punctuation\">.<\/span>summary<span class=\"token punctuation\">.<\/span>tables_with_structure_diff <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">||<\/span><br \/>\n    rawResponse<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>details<span class=\"token punctuation\">.<\/span>summary<span class=\"token punctuation\">.<\/span>tables_with_data_diff <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span> <span class=\"token operator\">||<\/span><br \/>\n    rawResponse<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>details<span class=\"token punctuation\">.<\/span>summary<span class=\"token punctuation\">.<\/span>tables_missing <span class=\"token operator\">&gt;<\/span> <span class=\"token number\">0<\/span><br \/>\n  <span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">const<\/span> <span class=\"token function-variable function\">compareDatabases<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">async<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&gt;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  <span class=\"token comment\">\/\/ \u9a8c\u8bc1\u5fc5\u586b\u5b57\u6bb5<\/span><br \/>\n  <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token operator\">!<\/span>db1<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>host <span class=\"token operator\">||<\/span> <span class=\"token operator\">!<\/span>db1<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>database <span class=\"token operator\">||<\/span> <span class=\"token operator\">!<\/span>db2<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>host <span class=\"token operator\">||<\/span> <span class=\"token operator\">!<\/span>db2<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>database<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    ElMessage<span class=\"token punctuation\">.<\/span><span class=\"token function\">error<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\u8bf7\u586b\u5199\u5b8c\u6574\u7684\u6570\u636e\u5e93\u8fde\u63a5\u4fe1\u606f&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token keyword\">return<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><\/p>\n<p>  <span class=\"token comment\">\/\/ \u786e\u4fdd\u7aef\u53e3\u662f\u6574\u6570<\/span><br \/>\n  <span class=\"token keyword\">const<\/span> db1Port <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">parseInt<\/span><span class=\"token punctuation\">(<\/span>db1<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>port<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">||<\/span> <span class=\"token number\">3306<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">const<\/span> db2Port <span class=\"token operator\">&#061;<\/span> <span class=\"token function\">parseInt<\/span><span class=\"token punctuation\">(<\/span>db2<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>port<span class=\"token punctuation\">)<\/span> <span class=\"token operator\">||<\/span> <span class=\"token number\">3306<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  loading<span class=\"token punctuation\">.<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">true<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token keyword\">try<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    <span class=\"token keyword\">const<\/span> response <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">await<\/span> axios<span class=\"token punctuation\">.<\/span><span class=\"token function\">post<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;http:\/\/192.168.1.138:5000\/db\/compare&#039;<\/span><span class=\"token punctuation\">,<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      db1_host<span class=\"token operator\">:<\/span> db1<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>host<span class=\"token punctuation\">,<\/span><br \/>\n      db1_port<span class=\"token operator\">:<\/span> db1Port<span class=\"token punctuation\">,<\/span><br \/>\n      db1_user<span class=\"token operator\">:<\/span> db1<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>user<span class=\"token punctuation\">,<\/span><br \/>\n      db1_password<span class=\"token operator\">:<\/span> db1<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>password<span class=\"token punctuation\">,<\/span><br \/>\n      db1_database<span class=\"token operator\">:<\/span> db1<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>database<span class=\"token punctuation\">,<\/span><br \/>\n      db2_host<span class=\"token operator\">:<\/span> db2<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>host<span class=\"token punctuation\">,<\/span><br \/>\n      db2_port<span class=\"token operator\">:<\/span> db2Port<span class=\"token punctuation\">,<\/span><br \/>\n      db2_user<span class=\"token operator\">:<\/span> db2<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>user<span class=\"token punctuation\">,<\/span><br \/>\n      db2_password<span class=\"token operator\">:<\/span> db2<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>password<span class=\"token punctuation\">,<\/span><br \/>\n      db2_database<span class=\"token operator\">:<\/span> db2<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">.<\/span>database<br \/>\n    <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>    <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>response<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>status <span class=\"token operator\">&#061;&#061;&#061;<\/span> <span class=\"token string\">&#034;error&#034;<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      errorMessage<span class=\"token punctuation\">.<\/span>value <span class=\"token operator\">&#061;<\/span> response<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>message<span class=\"token punctuation\">;<\/span><br \/>\n      ElMessage<span class=\"token punctuation\">.<\/span><span class=\"token function\">error<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\u8bf7\u6c42\u5931\u8d25&#xff1a;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> response<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">.<\/span>message<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n      rawResponse<span class=\"token punctuation\">.<\/span>value <span class=\"token operator\">&#061;<\/span> response<span class=\"token punctuation\">.<\/span>data<span class=\"token punctuation\">;<\/span><br \/>\n      errorMessage<span class=\"token punctuation\">.<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;&#039;<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>      <span class=\"token keyword\">if<\/span> <span class=\"token punctuation\">(<\/span>hasDiscrepancy<span class=\"token punctuation\">.<\/span>value<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        ElMessage<span class=\"token punctuation\">.<\/span><span class=\"token function\">error<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\u6570\u636e\u5e93\u5bf9\u6bd4\u53d1\u73b0\u4e0d\u4e00\u81f4&#xff01;&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">else<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n        ElMessage<span class=\"token punctuation\">.<\/span><span class=\"token function\">success<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\u6570\u636e\u5e93\u5bf9\u6bd4\u5b8c\u6210&#xff0c;\u6240\u6709\u5185\u5bb9\u4e00\u81f4&#039;<\/span><span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n      <span class=\"token punctuation\">}<\/span><br \/>\n    <span class=\"token punctuation\">}<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">catch<\/span> <span class=\"token punctuation\">(<\/span>error<span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    ElMessage<span class=\"token punctuation\">.<\/span><span class=\"token function\">error<\/span><span class=\"token punctuation\">(<\/span><span class=\"token string\">&#039;\u8bf7\u6c42\u5931\u8d25&#xff1a;&#039;<\/span> <span class=\"token operator\">&#043;<\/span> error<span class=\"token punctuation\">.<\/span>message<span class=\"token punctuation\">)<\/span><span class=\"token punctuation\">;<\/span><br \/>\n    errorMessage<span class=\"token punctuation\">.<\/span>value <span class=\"token operator\">&#061;<\/span> error<span class=\"token punctuation\">.<\/span>message<span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span> <span class=\"token keyword\">finally<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    loading<span class=\"token punctuation\">.<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token boolean\">false<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p><span class=\"token keyword\">const<\/span> <span class=\"token function-variable function\">resetForm<\/span> <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">(<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token operator\">&#061;&gt;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  db1<span class=\"token punctuation\">.<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    host<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    port<span class=\"token operator\">:<\/span> <span class=\"token number\">3306<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    user<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;root&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    password<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    database<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;&#039;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  db2<span class=\"token punctuation\">.<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n    host<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    port<span class=\"token operator\">:<\/span> <span class=\"token number\">3306<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    user<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;root&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    password<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;&#039;<\/span><span class=\"token punctuation\">,<\/span><br \/>\n    database<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;&#039;<\/span><br \/>\n  <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  rawResponse<span class=\"token punctuation\">.<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token keyword\">null<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  errorMessage<span class=\"token punctuation\">.<\/span>value <span class=\"token operator\">&#061;<\/span> <span class=\"token string\">&#039;&#039;<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>script<span class=\"token operator\">&gt;<\/span><\/p>\n<p><span class=\"token operator\">&lt;<\/span>style scoped<span class=\"token operator\">&gt;<\/span><br \/>\n<span class=\"token punctuation\">.<\/span>container <span class=\"token punctuation\">{<\/span><br \/>\n  width<span class=\"token operator\">:<\/span> <span class=\"token number\">90<\/span><span class=\"token operator\">%<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  max<span class=\"token operator\">&#8211;<\/span>width<span class=\"token operator\">:<\/span> <span class=\"token number\">1200<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n  margin<span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span> auto<span class=\"token punctuation\">;<\/span><br \/>\n  padding<span class=\"token operator\">:<\/span> <span class=\"token number\">20<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>header <span class=\"token punctuation\">{<\/span><br \/>\n  display<span class=\"token operator\">:<\/span> flex<span class=\"token punctuation\">;<\/span><br \/>\n  justify<span class=\"token operator\">&#8211;<\/span>content<span class=\"token operator\">:<\/span> space<span class=\"token operator\">&#8211;<\/span>between<span class=\"token punctuation\">;<\/span><br \/>\n  align<span class=\"token operator\">&#8211;<\/span>items<span class=\"token operator\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n  margin<span class=\"token operator\">&#8211;<\/span>bottom<span class=\"token operator\">:<\/span> <span class=\"token number\">20<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>header h2 <span class=\"token punctuation\">{<\/span><br \/>\n  margin<span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>back<span class=\"token operator\">&#8211;<\/span>button <span class=\"token punctuation\">{<\/span><br \/>\n  background<span class=\"token operator\">:<\/span> #<span class=\"token number\">42<\/span>b983 <span class=\"token operator\">!<\/span>important<span class=\"token punctuation\">;<\/span><br \/>\n  color<span class=\"token operator\">:<\/span> white <span class=\"token operator\">!<\/span>important<span class=\"token punctuation\">;<\/span><br \/>\n  border<span class=\"token operator\">:<\/span> none <span class=\"token operator\">!<\/span>important<span class=\"token punctuation\">;<\/span><br \/>\n  padding<span class=\"token operator\">:<\/span> <span class=\"token number\">8<\/span>px <span class=\"token number\">12<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n  border<span class=\"token operator\">&#8211;<\/span>radius<span class=\"token operator\">:<\/span> <span class=\"token number\">4<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n  cursor<span class=\"token operator\">:<\/span> pointer<span class=\"token punctuation\">;<\/span><br \/>\n  transition<span class=\"token operator\">:<\/span> background <span class=\"token number\">0.2<\/span>s<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>back<span class=\"token operator\">&#8211;<\/span>button<span class=\"token operator\">:<\/span>hover <span class=\"token punctuation\">{<\/span><br \/>\n  background<span class=\"token operator\">:<\/span> #<span class=\"token number\">3<\/span>aa876 <span class=\"token operator\">!<\/span>important<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>db<span class=\"token operator\">&#8211;<\/span>input<span class=\"token operator\">&#8211;<\/span>row <span class=\"token punctuation\">{<\/span><br \/>\n  margin<span class=\"token operator\">&#8211;<\/span>bottom<span class=\"token operator\">:<\/span> <span class=\"token number\">20<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>db<span class=\"token operator\">&#8211;<\/span>card <span class=\"token punctuation\">{<\/span><br \/>\n  height<span class=\"token operator\">:<\/span> <span class=\"token number\">100<\/span><span class=\"token operator\">%<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>form<span class=\"token operator\">&#8211;<\/span>row <span class=\"token punctuation\">{<\/span><br \/>\n  margin<span class=\"token operator\">&#8211;<\/span>top<span class=\"token operator\">:<\/span> <span class=\"token number\">10<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>button<span class=\"token operator\">&#8211;<\/span>container <span class=\"token punctuation\">{<\/span><br \/>\n  display<span class=\"token operator\">:<\/span> flex<span class=\"token punctuation\">;<\/span><br \/>\n  justify<span class=\"token operator\">&#8211;<\/span>content<span class=\"token operator\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n  margin<span class=\"token operator\">:<\/span> <span class=\"token number\">20<\/span>px <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  gap<span class=\"token operator\">:<\/span> <span class=\"token number\">20<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>result<span class=\"token operator\">&#8211;<\/span>card <span class=\"token punctuation\">{<\/span><br \/>\n  margin<span class=\"token operator\">&#8211;<\/span>top<span class=\"token operator\">:<\/span> <span class=\"token number\">20<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n  min<span class=\"token operator\">&#8211;<\/span>height<span class=\"token operator\">:<\/span> <span class=\"token number\">600<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>stats<span class=\"token operator\">&#8211;<\/span>container <span class=\"token punctuation\">{<\/span><br \/>\n  margin<span class=\"token operator\">&#8211;<\/span>bottom<span class=\"token operator\">:<\/span> <span class=\"token number\">20<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n  padding<span class=\"token operator\">:<\/span> <span class=\"token number\">15<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n  background<span class=\"token operator\">&#8211;<\/span>color<span class=\"token operator\">:<\/span> #f5f7fa<span class=\"token punctuation\">;<\/span><br \/>\n  border<span class=\"token operator\">&#8211;<\/span>radius<span class=\"token operator\">:<\/span> <span class=\"token number\">4<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>time<span class=\"token operator\">&#8211;<\/span>info <span class=\"token punctuation\">{<\/span><br \/>\n  margin<span class=\"token operator\">&#8211;<\/span>top<span class=\"token operator\">:<\/span> <span class=\"token number\">15<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n  display<span class=\"token operator\">:<\/span> flex<span class=\"token punctuation\">;<\/span><br \/>\n  justify<span class=\"token operator\">&#8211;<\/span>content<span class=\"token operator\">:<\/span> space<span class=\"token operator\">&#8211;<\/span>between<span class=\"token punctuation\">;<\/span><br \/>\n  font<span class=\"token operator\">&#8211;<\/span>size<span class=\"token operator\">:<\/span> <span class=\"token number\">12<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n  color<span class=\"token operator\">:<\/span> #<span class=\"token number\">909399<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>result<span class=\"token operator\">&#8211;<\/span>tabs <span class=\"token punctuation\">{<\/span><br \/>\n  margin<span class=\"token operator\">&#8211;<\/span>top<span class=\"token operator\">:<\/span> <span class=\"token number\">20<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>summary<span class=\"token operator\">&#8211;<\/span>message <span class=\"token punctuation\">{<\/span><br \/>\n  margin<span class=\"token operator\">&#8211;<\/span>bottom<span class=\"token operator\">:<\/span> <span class=\"token number\">20<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>identical<span class=\"token operator\">&#8211;<\/span>tables <span class=\"token punctuation\">{<\/span><br \/>\n  margin<span class=\"token operator\">&#8211;<\/span>top<span class=\"token operator\">:<\/span> <span class=\"token number\">20<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>table<span class=\"token operator\">&#8211;<\/span>tag <span class=\"token punctuation\">{<\/span><br \/>\n  margin<span class=\"token operator\">:<\/span> <span class=\"token number\">5<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>issue<span class=\"token operator\">&#8211;<\/span>item <span class=\"token punctuation\">{<\/span><br \/>\n  margin<span class=\"token operator\">&#8211;<\/span>bottom<span class=\"token operator\">:<\/span> <span class=\"token number\">10<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>issue<span class=\"token operator\">&#8211;<\/span>details <span class=\"token punctuation\">{<\/span><br \/>\n  margin<span class=\"token operator\">&#8211;<\/span>top<span class=\"token operator\">:<\/span> <span class=\"token number\">10<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>data<span class=\"token operator\">&#8211;<\/span>details <span class=\"token punctuation\">{<\/span><br \/>\n  margin<span class=\"token operator\">&#8211;<\/span>top<span class=\"token operator\">:<\/span> <span class=\"token number\">10<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n  padding<span class=\"token operator\">&#8211;<\/span>left<span class=\"token operator\">:<\/span> <span class=\"token number\">20<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>empty<span class=\"token operator\">&#8211;<\/span>result <span class=\"token punctuation\">{<\/span><br \/>\n  display<span class=\"token operator\">:<\/span> flex<span class=\"token punctuation\">;<\/span><br \/>\n  justify<span class=\"token operator\">&#8211;<\/span>content<span class=\"token operator\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n  align<span class=\"token operator\">&#8211;<\/span>items<span class=\"token operator\">:<\/span> center<span class=\"token punctuation\">;<\/span><br \/>\n  height<span class=\"token operator\">:<\/span> <span class=\"token number\">300<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>full<span class=\"token operator\">&#8211;<\/span>log<span class=\"token operator\">&#8211;<\/span>container <span class=\"token punctuation\">{<\/span><br \/>\n  max<span class=\"token operator\">&#8211;<\/span>height<span class=\"token operator\">:<\/span> <span class=\"token number\">500<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n  overflow<span class=\"token operator\">&#8211;<\/span>y<span class=\"token operator\">:<\/span> auto<span class=\"token punctuation\">;<\/span><br \/>\n  background<span class=\"token operator\">&#8211;<\/span>color<span class=\"token operator\">:<\/span> #f5f5f5<span class=\"token punctuation\">;<\/span><br \/>\n  border<span class=\"token operator\">&#8211;<\/span>radius<span class=\"token operator\">:<\/span> <span class=\"token number\">4<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n  padding<span class=\"token operator\">:<\/span> <span class=\"token number\">10<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>full<span class=\"token operator\">&#8211;<\/span>log<span class=\"token operator\">&#8211;<\/span>content <span class=\"token punctuation\">{<\/span><br \/>\n  font<span class=\"token operator\">&#8211;<\/span>family<span class=\"token operator\">:<\/span> monospace<span class=\"token punctuation\">;<\/span><br \/>\n  white<span class=\"token operator\">&#8211;<\/span>space<span class=\"token operator\">:<\/span> pre<span class=\"token operator\">&#8211;<\/span>wrap<span class=\"token punctuation\">;<\/span><br \/>\n  margin<span class=\"token operator\">:<\/span> <span class=\"token number\">0<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  line<span class=\"token operator\">&#8211;<\/span>height<span class=\"token operator\">:<\/span> <span class=\"token number\">1.5<\/span><span class=\"token punctuation\">;<\/span><br \/>\n  color<span class=\"token operator\">:<\/span> #<span class=\"token number\">333<\/span><span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>error<span class=\"token operator\">&#8211;<\/span>message <span class=\"token punctuation\">{<\/span><br \/>\n  margin<span class=\"token operator\">&#8211;<\/span>bottom<span class=\"token operator\">:<\/span> <span class=\"token number\">20<\/span>px<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token punctuation\">.<\/span>clearfix <span class=\"token punctuation\">{<\/span><br \/>\n  clear<span class=\"token operator\">:<\/span> both<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><\/p>\n<p><span class=\"token operator\">:<\/span><span class=\"token function\">deep<\/span><span class=\"token punctuation\">(<\/span><span class=\"token parameter\"><span class=\"token punctuation\">.<\/span>el<span class=\"token operator\">&#8211;<\/span>input__inner<\/span><span class=\"token punctuation\">)<\/span> <span class=\"token punctuation\">{<\/span><br \/>\n  text<span class=\"token operator\">&#8211;<\/span>align<span class=\"token operator\">:<\/span> left <span class=\"token operator\">!<\/span>important<span class=\"token punctuation\">;<\/span><br \/>\n<span class=\"token punctuation\">}<\/span><br \/>\n<span class=\"token operator\">&lt;<\/span><span class=\"token operator\">\/<\/span>style<span class=\"token operator\">&gt;<\/span><\/p>\n<h3>ui\/router\/index.js<\/h3>\n<p><span class=\"token keyword\">import<\/span> DbCompare <span class=\"token keyword\">from<\/span> <span class=\"token string\">&#039;..\/views\/DbCompare.vue&#039;<\/span><span class=\"token punctuation\">;<\/span><\/p>\n<p>  <span class=\"token punctuation\">{<\/span> path<span class=\"token operator\">:<\/span> <span class=\"token string\">&#039;\/db_compare&#039;<\/span><span class=\"token punctuation\">,<\/span> component<span class=\"token operator\">:<\/span> DbCompare <span class=\"token punctuation\">}<\/span><span class=\"token punctuation\">,<\/span><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/05\/20250519061422-682acc3eb1126.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h3>\u524d\u7aef\u542f\u52a8<\/h3>\n<p>cd ui npm run dev<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/05\/20250519061423-682acc3f04b79.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h2>\u6267\u884c\u5bf9\u6bd4<\/h2>\n<h3>\u5bf9\u6bd4\u7ed3\u679c\u6c47\u603b<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/05\/20250519061423-682acc3f23e93.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h3>\u5bf9\u6bd4\u7ed3\u679c &#8211; \u7ed3\u6784\u5dee\u5f02<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/05\/20250519061423-682acc3f7c2ee.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h3>\u5bf9\u6bd4\u7ed3\u679c &#8211; \u6570\u636e\u5dee\u5f02<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/05\/20250519061423-682acc3fd4d5b.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<h3>\u5bf9\u6bd4\u7ed3\u679c &#8211; \u5b8c\u6574\u65e5\u5fd7<\/h3>\n<p><img decoding=\"async\" src=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/05\/20250519061424-682acc4036ffc.png\" alt=\"\u5728\u8fd9\u91cc\u63d2\u5165\u56fe\u7247\u63cf\u8ff0\" \/><\/p>\n<p>\u58f0\u660e&#xff1a; \u672c\u6587\u4e2d\u7684\u4ee3\u7801\u793a\u4f8b\u7531 DeepSeek \u751f\u6210&#xff0c;\u7ecf\u8fc7\u4eba\u5de5\u6574\u7406\u548c\u6838\u5bf9\u540e\u7b26\u5408\u5de5\u4f5c\u5b9e\u9645\u9700\u6c42\u3002 DeepSeek \u662f\u4e00\u6b3e\u5f3a\u5927\u7684AI\u7f16\u7a0b\u52a9\u624b&#xff0c;\u80fd\u9ad8\u6548\u89e3\u51b3\u6280\u672f\u95ee\u9898&#xff0c;\u63a8\u8350\u5927\u5bb6\u4f7f\u7528&#xff01;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb326\u6b21\uff0c\u70b9\u8d5e4\u6b21\uff0c\u6536\u85cf8\u6b21\u3002\u672c\u6587\u4ecb\u7ecd\u4e86\u5982\u4f55\u5b9e\u73b0MySQL\u4e2d\u4e24\u4e2a\u6570\u636e\u5e93\u7684\u8868\u3001\u8868\u7ed3\u6784\u548c\u8868\u6570\u636e\u7684\u5bf9\u6bd4\u529f\u80fd\u3002\u901a\u8fc7Vue3\u548cFlask\u6784\u5efa\u524d\u540e\u7aef\u9879\u76ee\uff0c\u529f\u80fd\u5305\u62ec\u83b7\u53d6\u8868\u7ed3\u6784\u4fe1\u606f\u3001\u8ba1\u7b97\u8868\u6570\u636e\u54c8\u5e0c\u503c\u3001\u6bd4\u8f83\u6570\u636e\u5e93\u7ed3\u6784\u548c\u6570\u636e\uff0c\u5e76\u751f\u6210\u8be6\u7ec6\u7684\u5bf9\u6bd4\u7ed3\u679c\u3002\u8be5\u529f\u80fd\u53ef\u7528\u4e8e\u6570\u636e\u5e93\u8fc1\u79fb\u3001\u540c\u6b65\u7b49\u573a\u666f\uff0c\u786e\u4fdd\u6570\u636e\u4e00\u81f4\u6027\u3002<\/p>\n","protected":false},"author":2,"featured_media":38132,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[684,153,114,458,100],"topic":[],"class_list":["post-38140","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-server","tag-vue3","tag-flask","tag-mysql","tag-vue","tag-100"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>vue3_flask\u5b9e\u73b0mysql\u6570\u636e\u5e93\u5bf9\u6bd4\u529f\u80fd - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.wsisp.com\/helps\/38140.html\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"vue3_flask\u5b9e\u73b0mysql\u6570\u636e\u5e93\u5bf9\u6bd4\u529f\u80fd - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"og:description\" content=\"\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb326\u6b21\uff0c\u70b9\u8d5e4\u6b21\uff0c\u6536\u85cf8\u6b21\u3002\u672c\u6587\u4ecb\u7ecd\u4e86\u5982\u4f55\u5b9e\u73b0MySQL\u4e2d\u4e24\u4e2a\u6570\u636e\u5e93\u7684\u8868\u3001\u8868\u7ed3\u6784\u548c\u8868\u6570\u636e\u7684\u5bf9\u6bd4\u529f\u80fd\u3002\u901a\u8fc7Vue3\u548cFlask\u6784\u5efa\u524d\u540e\u7aef\u9879\u76ee\uff0c\u529f\u80fd\u5305\u62ec\u83b7\u53d6\u8868\u7ed3\u6784\u4fe1\u606f\u3001\u8ba1\u7b97\u8868\u6570\u636e\u54c8\u5e0c\u503c\u3001\u6bd4\u8f83\u6570\u636e\u5e93\u7ed3\u6784\u548c\u6570\u636e\uff0c\u5e76\u751f\u6210\u8be6\u7ec6\u7684\u5bf9\u6bd4\u7ed3\u679c\u3002\u8be5\u529f\u80fd\u53ef\u7528\u4e8e\u6570\u636e\u5e93\u8fc1\u79fb\u3001\u540c\u6b65\u7b49\u573a\u666f\uff0c\u786e\u4fdd\u6570\u636e\u4e00\u81f4\u6027\u3002\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.wsisp.com\/helps\/38140.html\" \/>\n<meta property=\"og:site_name\" content=\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\" \/>\n<meta property=\"article:published_time\" content=\"2025-05-19T06:14:25+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/05\/20250519061421-682acc3dbb54c.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"16 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/38140.html\",\"url\":\"https:\/\/www.wsisp.com\/helps\/38140.html\",\"name\":\"vue3_flask\u5b9e\u73b0mysql\u6570\u636e\u5e93\u5bf9\u6bd4\u529f\u80fd - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"isPartOf\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\"},\"datePublished\":\"2025-05-19T06:14:25+00:00\",\"dateModified\":\"2025-05-19T06:14:25+00:00\",\"author\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.wsisp.com\/helps\/38140.html#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.wsisp.com\/helps\/38140.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/38140.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.wsisp.com\/helps\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"vue3_flask\u5b9e\u73b0mysql\u6570\u636e\u5e93\u5bf9\u6bd4\u529f\u80fd\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#website\",\"url\":\"https:\/\/www.wsisp.com\/helps\/\",\"name\":\"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3\",\"description\":\"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"contentUrl\":\"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery\",\"caption\":\"admin\"},\"sameAs\":[\"http:\/\/wp.wsisp.com\"],\"url\":\"https:\/\/www.wsisp.com\/helps\/author\/admin\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"vue3_flask\u5b9e\u73b0mysql\u6570\u636e\u5e93\u5bf9\u6bd4\u529f\u80fd - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.wsisp.com\/helps\/38140.html","og_locale":"zh_CN","og_type":"article","og_title":"vue3_flask\u5b9e\u73b0mysql\u6570\u636e\u5e93\u5bf9\u6bd4\u529f\u80fd - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","og_description":"\u6587\u7ae0\u6d4f\u89c8\u9605\u8bfb326\u6b21\uff0c\u70b9\u8d5e4\u6b21\uff0c\u6536\u85cf8\u6b21\u3002\u672c\u6587\u4ecb\u7ecd\u4e86\u5982\u4f55\u5b9e\u73b0MySQL\u4e2d\u4e24\u4e2a\u6570\u636e\u5e93\u7684\u8868\u3001\u8868\u7ed3\u6784\u548c\u8868\u6570\u636e\u7684\u5bf9\u6bd4\u529f\u80fd\u3002\u901a\u8fc7Vue3\u548cFlask\u6784\u5efa\u524d\u540e\u7aef\u9879\u76ee\uff0c\u529f\u80fd\u5305\u62ec\u83b7\u53d6\u8868\u7ed3\u6784\u4fe1\u606f\u3001\u8ba1\u7b97\u8868\u6570\u636e\u54c8\u5e0c\u503c\u3001\u6bd4\u8f83\u6570\u636e\u5e93\u7ed3\u6784\u548c\u6570\u636e\uff0c\u5e76\u751f\u6210\u8be6\u7ec6\u7684\u5bf9\u6bd4\u7ed3\u679c\u3002\u8be5\u529f\u80fd\u53ef\u7528\u4e8e\u6570\u636e\u5e93\u8fc1\u79fb\u3001\u540c\u6b65\u7b49\u573a\u666f\uff0c\u786e\u4fdd\u6570\u636e\u4e00\u81f4\u6027\u3002","og_url":"https:\/\/www.wsisp.com\/helps\/38140.html","og_site_name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","article_published_time":"2025-05-19T06:14:25+00:00","og_image":[{"url":"https:\/\/www.wsisp.com\/helps\/wp-content\/uploads\/2025\/05\/20250519061421-682acc3dbb54c.png"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"admin","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"16 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.wsisp.com\/helps\/38140.html","url":"https:\/\/www.wsisp.com\/helps\/38140.html","name":"vue3_flask\u5b9e\u73b0mysql\u6570\u636e\u5e93\u5bf9\u6bd4\u529f\u80fd - \u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","isPartOf":{"@id":"https:\/\/www.wsisp.com\/helps\/#website"},"datePublished":"2025-05-19T06:14:25+00:00","dateModified":"2025-05-19T06:14:25+00:00","author":{"@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41"},"breadcrumb":{"@id":"https:\/\/www.wsisp.com\/helps\/38140.html#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.wsisp.com\/helps\/38140.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.wsisp.com\/helps\/38140.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.wsisp.com\/helps"},{"@type":"ListItem","position":2,"name":"vue3_flask\u5b9e\u73b0mysql\u6570\u636e\u5e93\u5bf9\u6bd4\u529f\u80fd"}]},{"@type":"WebSite","@id":"https:\/\/www.wsisp.com\/helps\/#website","url":"https:\/\/www.wsisp.com\/helps\/","name":"\u7f51\u7855\u4e92\u8054\u5e2e\u52a9\u4e2d\u5fc3","description":"\u9999\u6e2f\u670d\u52a1\u5668_\u9999\u6e2f\u4e91\u670d\u52a1\u5668\u8d44\u8baf_\u670d\u52a1\u5668\u5e2e\u52a9\u6587\u6863_\u670d\u52a1\u5668\u6559\u7a0b","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.wsisp.com\/helps\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/358e386c577a3ab51c4493330a20ad41","name":"admin","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.wsisp.com\/helps\/#\/schema\/person\/image\/","url":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","contentUrl":"https:\/\/gravatar.wp-china-yes.net\/avatar\/?s=96&d=mystery","caption":"admin"},"sameAs":["http:\/\/wp.wsisp.com"],"url":"https:\/\/www.wsisp.com\/helps\/author\/admin"}]}},"_links":{"self":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/38140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/comments?post=38140"}],"version-history":[{"count":0,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/posts\/38140\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media\/38132"}],"wp:attachment":[{"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/media?parent=38140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/categories?post=38140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/tags?post=38140"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.wsisp.com\/helps\/wp-json\/wp\/v2\/topic?post=38140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}