You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何相同代码在macOS与Windows下生成的数据库文件数量不同?

问题:相同代码在Windows与macOS运行后文件结构差异的原因

我在Windows和macOS系统中运行了相同的Python代码,代码如下:

def build_database() -> Database | None:
    if not os.path.exists('accounts.db'):
        paths = ['discord.txt', 'facebook.txt', 'google.txt', 'linkedin.txt',
                 'twitter.txt', 'metamask.txt', 'proxies.txt']
        data = [content for content in read_from_files(paths)]
        parsing_data = ParsingData(*data)
        with Database('accounts', parsing_data) as db:
            db.build([ModelType.LINKEDIN, ModelType.FACEBOOK, ModelType.GOOGLE,
                      ModelType.TWITTER, ModelType.DISCORD, ModelType.METAMASK])
        return db
    else:
        return Database('accounts')


def __init__(self, name: str):
    self.__name = name
    self.__sql_db = SqliteDatabase(f'{name}.db')
    self.__is_connected = False

运行后文件结构出现明显差异:

  • Windows系统下生成accounts.db与accounts.db-journal两个文件
  • macOS系统下生成accounts.db与accounts.sqlite两个文件

请问该差异的原因是什么?


原因分析

核心差异源于两方面:SQLite自身的日志机制差异,以及你使用的SqliteDatabase类在不同操作系统下的默认行为:

  1. Windows下的accounts.db-journal文件
    这是SQLite的回滚日志文件,当SQLite未启用WAL(预写日志)模式时,会生成该文件用于事务的回滚与崩溃恢复。在Windows环境中,若你的SqliteDatabase默认未开启WAL模式,事务执行过程中就会创建这个临时文件;正常关闭连接后它会自动删除,程序异常退出时可能残留。

  2. macOS下的accounts.sqlite文件
    这个文件的出现大概率是你使用的SqliteDatabase类(如peewee等ORM框架的封装类)在macOS下的默认配置导致:

    • 部分ORM的SqliteDatabase实现,在Unix-like系统(包括macOS)中,若传入的数据库文件名未带.sqlite后缀,会自动追加该后缀,同时你代码中明确指定的accounts.db也被创建,最终出现两个数据库文件。
    • 也可能是代码中未展示的逻辑在macOS环境下触发了额外的数据库文件创建操作。

此外,需检查SqliteDatabase的初始化参数:若开启WAL模式,SQLite会生成-wal和-shm文件而非-journal,这也会导致日志文件类型的差异。


内容的提问来源于stack exchange,提问作者blnk.off

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:20:16