Spaces:
Running
Running
A newer version of the Gradio SDK is available:
6.1.0
Convert mysql sang sqlite
Giả sử tôi đặt tên file .sql sử dụng trong mysql là schema.sql
import sqlite3
import re
import os
# Cấu hình tên file
INPUT_SQL_FILE = 'schema.sql' # Tên file SQL gốc của bạn
OUTPUT_DB_FILE = 'database.db' # Tên file SQLite muốn tạo
def convert_mysql_to_sqlite(sql_content):
# 1. Xóa các dòng comment SQL (bắt đầu bằng -- hoặc /*)
sql_content = re.sub(r'/\*.*?\*/', '', sql_content, flags=re.DOTALL)
# 2. Xóa cú pháp COMMENT '...' của MySQL
# Regex này tìm từ khóa COMMENT theo sau là chuỗi trong dấu nháy đơn
sql_content = re.sub(r"COMMENT\s+'.*?'", "", sql_content)
# 3. Xử lý AUTO_INCREMENT
# SQLite tự động tăng nếu là INTEGER PRIMARY KEY, nên chỉ cần xóa từ khóa này
sql_content = re.sub(r"AUTO_INCREMENT", "", sql_content, flags=re.IGNORECASE)
# 4. Thay thế kiểu dữ liệu BIT(1) thành INTEGER (SQLite không có BIT)
sql_content = re.sub(r"BIT$1$", "INTEGER", sql_content, flags=re.IGNORECASE)
# 5. Thay thế giá trị bit b'0', b'1' thành 0, 1
sql_content = re.sub(r"b'0'", "0", sql_content)
sql_content = re.sub(r"b'1'", "1", sql_content)
# 6. Xóa các thiết lập cuối bảng của MySQL (ENGINE=InnoDB...)
sql_content = re.sub(r"\) ENGINE=.*?;", ");", sql_content, flags=re.DOTALL)
# 7. Thay thế \' trong chuỗi thành '' (cách escape của SQLite)
sql_content = sql_content.replace("\\'", "''")
return sql_content
# Xóa file cũ nếu có
if os.path.exists(OUTPUT_DB_FILE):
os.remove(OUTPUT_DB_FILE)
# Kết nối SQLite
conn = sqlite3.connect(OUTPUT_DB_FILE)
cursor = conn.cursor()
print("Đang đọc và xử lý file SQL...")
try:
with open(INPUT_SQL_FILE, 'r', encoding='utf-8') as f:
raw_sql = f.read()
clean_sql = convert_mysql_to_sqlite(raw_sql)
# Tách các câu lệnh bằng dấu chấm phẩy và thực thi từng câu
statements = clean_sql.split(';')
count = 0
for statement in statements:
if statement.strip():
try:
cursor.execute(statement)
count += 1
except sqlite3.Error as e:
print(f"Lỗi tại câu lệnh: {statement[:50]}...")
print(f"Chi tiết: {e}")
conn.commit()
print(f"Xong! Đã tạo file '{OUTPUT_DB_FILE}' với {count} câu lệnh thành công.")
except FileNotFoundError:
print(f"Lỗi: Không tìm thấy file '{INPUT_SQL_FILE}'")
except Exception as e:
print(f"Lỗi không mong muốn: {e}")
finally:
conn.close()