如何在使用新列升级表模式时使SELECT查询工作
How to make SELECT query work when the table schema is upgraded with a new column?
我正在做一个JavaScript项目,它有一个现有的数据库(因此有一个现有的模式)。
要添加一个新特性,我必须在表中添加一个新列。这将存储一个类的对象的属性。
当前项目中有一个SELECT
查询,每次应用程序启动时都会从数据库表中查询一堆字段,然后将这些获得的结果放入所需的各种JavaScript对象中。
那么,现在它看起来像:
let FIELDS = "field1, field2, field3";
let query = "SELECT " + FIELDS + "FROM FOO_TABLE";
在其他地方,这个查询是在需要时进行的(通常在应用程序重启后)。
我想改成:
let FIELDS = "field1, field2, field3, new_prop";
但是在当前表中不起作用,这样的表不存在。(也许在下次重启后,事情会工作,但不是第一次)。
解决方法是什么?此外,请注意,静默更改将比显示该属性是new对每个处理该文件的人更好。
你不能只在查询中添加字段,这是行不通的,所以你有两个选择。
- 使用异常/错误来确定是否出了问题。我不是一个sqlite大师(事实上我从来没有直接使用过sqlite,总是通过API与ios开发),但如果你试图运行一个查询包含一个不存在的列名,有些东西会出错,你可以捕获,找出错误代码/字符串,并决定重新运行查询减去坏列。
这不是一个好主意,它既脏又贵。我已经使用异常来保存欺骗检查查询的过去,但即使这不是正确的方式去做的事情…
- 做你想做的唯一"正确"的方法是首先检查列是否存在。在sqlite,我不认为有一个简单的选择命令,就像在mysql。但是您可以使用
PRAGMA table_info('table-name')
语句获取所有列,然后在运行查询之前检查您的列是否存在。这是正确的做法。
话虽如此,如果你在一个协作/团队开发环境中工作,你应该有一个更清晰的方式来升级小组中的每个人。因此,我更倾向于解决过程的问题,而不是围绕它编写代码。
相关文章:
- jquery点击函数select&取消选择
- Javascript,访问一个主要对象模块模式中的每个对象
- 在html Select中添加搜索
- 是否有任何snippet或jQuery插件可以列出easylist.txt模式匹配的DOM中的所有元素
- 试图在引导模式内动态生成图表,得到offsetWidth错误
- Jquery:未触发select事件
- 如何在PHP中使用$_POST获取Select元素值
- 同位素库错误:未捕获错误无布局模式包装生产线8
- 无法在Ionic select中预先选择最后一个选项
- 在DOM中查找一个模式并替换它's的内容使用jquery
- 如何缩短MongoDB ObjectId并在Mongoose模式中使用它
- Dojo:访问dijit.form.Select中单击的项目
- D3.js模式不适用于弧形或圆环图
- Webdriver.io pageObject模式-通过传递参数来定义元素选择器
- 模块模式和这个
- X秒后刷新select元素
- 带有let的JS/EECMAScript6私有字段的模式
- 根据select选项元素将表单重定向到不同的URL
- 在select元素中显示highchart dashstyle(svg)
- 如何在使用新列升级表模式时使SELECT查询工作