数据库随软件更新而变化

zer*_*ref 1 python sqlite

我有一个程序,它有一个具有特定模式的数据库,v0.1.0.

在我的下一个版本 ( v0.1.1) 中,我对数据库模式进行了更改。

因此,当我更新到 ( 0.1.1) 时,我希望这些更改能够生效,而不影响 ( 0.1.0) 和后续版本中的原始数据。

如何在不影响 ( 0.1.0) 数据库数据的情况下进行更改并在后续版本中跟踪这些更改?

我正在使用 python 与sqlite3.

更新

不支持该软件的多个版本。数据库取决于您使用的版本。

没有对数据库的并发访问,每个版本 1 个数据库。

因此用户可以使用旧版本,但是当他们升级到新版本时,.sqlite 架构将会更改。

Mar*_*ers 5

user_version使用PRAGMA跟踪数据库中的架构版本,并保留一系列升级步骤:

def get_schema_version(conn):
    cursor = conn.execute('PRAGMA user_version')
    return cursor.fetchone()[0]

def set_schema_version(conn, version):
    conn.execute('PRAGMA user_version={:d}'.format(version))

def initial_schema(conn):
    # install initial schema
    # ...

def ugrade_1_2(conn):
    # modify schema, alter data, etc.

# map target schema version to upgrade step from previous version
upgrade_steps = {
    1: initial_schema,
    2: ugrade_1_2,
}

def check_upgrade(conn):
    current = get_schema_version(conn)
    target = max(upgrade_steps)
    for step in range(current + 1, target + 1):
        if step in upgrade_steps:
            upgrade_steps[step](conn)
            set_schema_version(conn, step)
Run Code Online (Sandbox Code Playgroud)