【干货】使用Python将.so类型的数据库文件转换为.db类型

背景

近期有涉及到如何将.so类型的数据库文件转换为.db类型,从而能够使用Navicat等图形化工具查看表结构和数据,这里贴上转换代码做个记录。

代码

import sqlite3

def convert_so_to_db(so_file, db_file):
    # 打开 .so 文件
    conn = sqlite3.connect(so_file)
    cursor = conn.cursor()

    # 创建新的 .db 文件
    new_conn = sqlite3.connect(db_file)
    new_cursor = new_conn.cursor()

    # 复制表结构和数据
    cursor.execute("SELECT name, sql FROM sqlite_master WHERE type='table' AND name != 'sqlite_sequence';")
    tables = cursor.fetchall()

    for table_name, create_table_sql in tables:
        new_cursor.execute(create_table_sql)
        cursor.execute(f"SELECT * FROM {table_name};")
        rows = cursor.fetchall()
        for row in rows:
            placeholders = ', '.join(['?' for _ in row])
            new_cursor.execute(f"INSERT INTO {table_name} VALUES ({placeholders})", row)

    # 复制索引
    cursor.execute("SELECT name, sql FROM sqlite_master WHERE type='index';")
    indexes = cursor.fetchall()
    for index_name, create_index_sql in indexes:
        if create_index_sql is not None:
            new_cursor.execute(create_index_sql)

    # 复制视图
    cursor.execute("SELECT name, sql FROM sqlite_master WHERE type='view';")
    views = cursor.fetchall()
    for view_name, create_view_sql in views:
        if create_view_sql is not None:
            new_cursor.execute(create_view_sql)

    # 复制触发器
    cursor.execute("SELECT name, sql FROM sqlite_master WHERE type='trigger';")
    triggers = cursor.fetchall()
    for trigger_name, create_trigger_sql in triggers:
        if create_trigger_sql is not None:
            new_cursor.execute(create_trigger_sql)

    # 提交并关闭连接
    new_conn.commit()
    new_conn.close()
    conn.close()


# 调用函数进行转换
convert_so_to_db('wacai365.so', 'wacai365.db')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值