验证SQLite表架构
在使用表之前,我需要验证表的模式是否与正在执行的代码完全对应。我知道有一个命令验证SQLite表架构,sql,sqlite,schema,Sql,Sqlite,Schema,在使用表之前,我需要验证表的模式是否与正在执行的代码完全对应。我知道有一个命令.schema tablename,它的结果可以散列并与实际模式的散列进行比较。问题是存储的模式包含创建表时使用的所有多余字符(重复制表符、空格、新行字符),如果在下一版本代码中更改模式中的空格数,则无法识别该表 我不想手动解析每一列的所有属性 我不能仅仅通过split&join或regexp删除重复的空格,因为有时它们并不重复,但仍然过多(例如,在左括号附近) 这看起来像是一项非常常见的任务——验证表的模式——但我看
.schema tablename
,它的结果可以散列并与实际模式的散列进行比较。问题是存储的模式包含创建表时使用的所有多余字符(重复制表符、空格、新行字符),如果在下一版本代码中更改模式中的空格数,则无法识别该表
我不想手动解析每一列的所有属性
我不能仅仅通过split&join或regexp删除重复的空格,因为有时它们并不重复,但仍然过多(例如,在左括号附近)
这看起来像是一项非常常见的任务——验证表的模式——但我看不到有效实现该任务的方法
UPD
我考虑的另一种可能的方法是:创建一个临时表,并使用一些内部sqlite函数将其模式与目标表的模式进行比较。它能工作吗 可能的解决方案:
PRAGMA schema\u版本代码>或PRAGMA用户版本代码>
有几种使用它们来验证表的方案的变体,但我相信您会找到合适的方法可以通过编程实现吗?如果是这样,首先获取所有表的列表(.tables
),然后针对每个表运行pragma table\u info(table)代码>@Dan这就是我所说的“手动解析每一列及其所有属性”的意思。这是可能的,但确实如此hard@Dan我理想的验证只是比较两个散列