我有一个程序,它有一个具有特定模式的数据库,v0.1.0.
在我的下一个版本 ( v0.1.1) 中,我对数据库模式进行了更改。
因此,当我更新到 ( 0.1.1) 时,我希望这些更改能够生效,而不影响 ( 0.1.0) 和后续版本中的原始数据。
如何在不影响 ( 0.1.0) 数据库数据的情况下进行更改并在后续版本中跟踪这些更改?
我正在使用 python 与sqlite3.
更新
不支持该软件的多个版本。数据库取决于您使用的版本。
没有对数据库的并发访问,每个版本 1 个数据库。
因此用户可以使用旧版本,但是当他们升级到新版本时,.sqlite 架构将会更改。
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)