添加列之前如何检查列是否存在

2023-11-26

我有一个数据库,如果它不存在,我想向其中添加一列。 如何使用 sqlite.swift API 做到这一点?


通常,如果要向现有表添加新列,您将需要一个迁移路径。您可以使用userVersion管理数据库架构版本的属性:

if db.userVersion < 1 {

    db.create(table: users) { t in
        t.column(id, primaryKey: true)
        t.column(email, unique: true)
    }

    db.userVersion = 1
}

if db.userVersion < 2 {

    db.alter(table: users, add: name)
    db.alter(table: users, add: age)

    db.userVersion = 2
}

您还可以按照 Max 的建议,使用ifNotExists: at the create(table:…) level:

 db.create(table: users, ifNotExists: true) { t in
    t.column(id, primaryKey: true)
    t.column(email, unique: true)
 }

但要添加新列,您必须解析一个笨拙的 PRAGMA 语句:

 let tableInfo = Array(db.prepare("PRAGMA table_info(users)"))
 if tableInfo.filter { col in col[1] == "name" } == nil {
    db.alter(table: users, add: name)
 }
 if tableInfo.filter { col in col[1] == "age" } == nil {
    db.alter(table: users, add: age)
 }

几乎不具有可读性(或推荐),但如果您正在处理遗留数据库,则可能有必要。

请务必阅读ALTER TABLE 文档用于更复杂的更改。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

添加列之前如何检查列是否存在 的相关文章

  • 迁移到 AndroidX 后 AppBarLayout 膨胀错误

    当迁移到AndroidX我遇到了这个问题 Java lang RuntimeException Unable to start activity ComponentInfo com mandarine android com mandari
  • Google Cloud Functions 包含私有库

    我正在寻找在节点中编写一个自定义库 并且希望将其包含在我的云函数中 由于这是共享代码 我希望能够在我的所有云功能中使用它 编写共享代码库并让多个云函数访问该库的最佳方式是什么 例如 假设我有两个云函数 functionS 和 functio
  • ReferenceError:PF 未定义

    我尝试过通知栏PrimeFaces 的示例 但是它不起作用 我收到以下 JS 错误 ReferenceError PF 未定义 我想我需要在使用之前包含一个库PF 函数 但我不知道哪个库以及在哪里可以找到它 JS 函数PF 仅从 4 0 开
  • Python3 - 使用 Socks5 代理的请求

    有没有办法使用socks5代理来使用TOR处理请求 我知道请求只使用http代理 import requests r requests get http www google com proxies my proxy 您可以使用socks
  • 通过反射获取Java中类的公共静态最终字段/属性的值

    假设我有一堂课 public class R public static final int 1st 0x334455 我怎样才能得到的值 1st 通过反射 首先检索类的字段属性 然后您可以检索值 如果您知道类型 则可以使用带有 null
  • 通过单击弹出窗口外部来关闭弹出窗口 javascript

    我使用本教程将弹出窗口添加到我的网页 有没有一种方法可以使当您单击弹出窗口外部 单击另一个弹出窗口时关闭弹出窗口 我尝试按照这篇文章添加一个invisibleDiv通过单击外部来关闭弹出的 div但弹出窗口仍然仅在单击按钮本身时才会移动 h
  • 有没有办法在 Visual Studio Code 中设置环境变量?

    如何在 Visual Studio Code 中设置环境变量 假设您的意思是调试会话 那么您可以包括env您的财产启动配置 如果您在工作区中打开 vscode launch json 文件或选择 调试 gt 打开配置 那么您应该会看到一组用
  • 如何在 html-webpack-plugin 中注入自定义元标记?

    我将 Webpack 与插件一起使用html webpack plugin 基于环境变量 我想注入一个标记进入决赛index html file 我该怎么做呢 您可以定义自己的模板 中简要提到了编写您自己的模板您可以将任何您想要的选项传递给
  • TypeScript 中元组的通用类型包装

    我需要向映射元组元素的函数添加类型声明 Foo a Foo b 到一个函数 gt A B 我怎样才能在 TypeScript 中实现这一目标 此示例在结构上与应用程序的相关部分类似 interface SomethingWithAValue
  • 使用内连接更新?

    我有两个数据库 DB1 and DB2 如何做类似的事情 update myServer DB1 dbo hotels Name myServer DB2 dbo hotels Name join myServer DB2 dbo hote
  • 删除变量(如果存在)的正确方法

    我尝试这样做 def create l if l in globals l destroy l Listbox root 这工作正常 但它返回语法警告 Warning from warnings module File C Users Us
  • 如何在 django 中对文件上传进行单元测试

    在我的 django 应用程序中 我有一个完成文件上传的视图 核心代码片段是这样的 if request method POST if request FILES has key file file request FILES file w
  • 如何将具有外键的表更新到 ADO.Net 实体模型中的另一个表?

    我有 2 个表 Table1 有一个主键 CustomizationId Table2 有一个与此匹配的 FK Customizationid Table2 没有主键 我正在尝试从基于网络的表单添加新记录 我尝试将其保存到数据库中 但收到错
  • Android openRawResource() 不适用于可绘制对象

    我正在尝试通过这样做来创建输入流 InputStream is InputStream getResources openRawResource R drawable image1 但我遇到了关于我的可绘制文件 R drawable ima

随机推荐

  • R Blogdown Hugo 学术主题未渲染站点

    我正在尝试使用 R Blogdown Hugo Academic 主题创建一个网站 通常 我会通过运行以下命令来创建一个网站 blogdown new site theme gcushen hugo academic blogdown se
  • 类型错误:需要类似字节的对象,而不是 subprocess.check_output 中的“str”

    我收到 TypeError a bytes like object is required not str 在 python3 5 的以下代码行中 path os getcwd strip n Null userprof subproces
  • TypeScript 需要进行类型检查

    我正在使用 TypeScript v1 4 1 并且希望需要一个外部模块 在本例中为 chai 并对其进行类型检查 但是 我遇到了与此代码的某种命名冲突
  • 字符串替换转义字符

    今天我发现将字符串放入资源文件中会导致它们被视为文字 即放置 第一行文本 n第二行文本 将导致转义字符本身被转义 因此存储的内容是 第一行的文本 n 第二行的文本 然后这些出现在显示屏中 而不是我的回车符和制表符 所以我想做的是使用 str
  • 无法在 VBA 中创建新枚举

    我正在 VBA 中创建一个不可变链接列表类 它提供ToArray and ToCollection方法 我已经验证这两种方法都有效 但是 那Get NewEnum As IUnknown财产不工作 我不知道为什么 Public Proper
  • 如何使用 Android UiAutomation.injectInputEvent 注入点击事件

    我正在自动测试我安装设备管理员的应用程序中的流程 要在大多数设备上激活设备管理员 假设这里没有一些企业 API 可以让我像三星提供的那样执行此操作 系统会向用户显示一个弹出窗口 然后用户必须单击 激活 按钮 我在用着Robotium和 An
  • Angular.js 说自定义 HTTP 响应标头为 null

    POST 的回调函数为我的自定义 HTTP 标头返回 nullX Auth Token Chrome 显示了正确的 POST 响应标头 但 Angular js 却没有 Angular 唯一返回的是 Cache Control 和 Cont
  • 在 AngularJS 中创建阅读更多链接

    我想创建一个包含阅读更多文本的链接 如果段落中的行数超过 3 行 则此链接应该可见 单击此链接将显示所有行 我想做同样的事情 所以我创建了一个指令 看看这里 https gist github com doukasd 0744566c549
  • 没有位置服务的 iOS 后台轮询

    这是一个我们都曾多次想知道的问题 但似乎没有人有一个好的答案 像 DataMan 这样的应用程序如何在后台定期 无限期地运行 并且仍然进入应用程序商店 该应用程序允许用户打开 精确数据跟踪 并选择应用程序在零用户交互的情况下更新其数据使用计
  • dotnetpublish 未发布正确的 appsettings.{env.EnvironmentName}.json

    当我在命令行中发出以下命令时 dotnet publish o output c Release The dotnetcli正确发布项目 然而 它并不复制appsettings Production json文件 仅appsettings
  • 如何直接在 Visual Studio 中构建 mex 文件?

    我有一个包含函数库的 Visual Studio 2010 解决方案 并且我希望能够使用 MATLAB 作为该库的几个可能的前端之一 因此 我希望 Visual Studio 在构建解决方案时自动生成 mex 文件 而不必将所有构建选项和路
  • 别名模板专业化

    别名模板 14 5 7 可以显式专门化 14 7 3 吗 我的标准 fu 失败了 我找不到编译器来测试 文本 当 template id 引用别名模板的专门化时 意味着yes 但这个例子似乎指的是其他东西 暗示no NB I m worki
  • 包含非自反元素的集合的比较

    在Python中 一个值x并不总是被限制为等于自身 也许最著名的例子是NaN gt gt gt x float NaN gt gt gt x x False 现在考虑仅包含一项的列表 我们可以考虑两个这样的列表equal当且仅当它们包含的物
  • 在 C# 中使用 Linq 或 lambda 从数据库表中获取 X 个随机元素

    我有一个包含 x 个用户的数据库 我想随机获取所有用户 然后在我的网站上写下 50 个用户 现在我只使用 take 50 并检索最新 50 个用户 我希望它从整个表中随机洗牌 50 个 有什么想法吗 这就是我的代码现在的样子 userLis
  • %r 是什么意思?

    是什么意思 r在下面的声明中 print r 1 我想我听说过 s d and f但从未听说过这个 背景 在Python中 有两个内置函数用于将对象转换为字符串 str vs repr str应该是一个友好的 人类可读的字符串 repr应该
  • 防止 JSPX 创建自关闭标签 (
    !=

    JSPX 有一个可爱的旋转副作用 div class magic div Into div class magic div 对于许多浏览器来说 即使它是有效的 XHTML 这也会导致布局混乱 因此 我求助于使用 groovy 脚本通过以下正
  • jQuery DataTables 渲染列数据

    我正在使用 jQuery DataTables 显示来自 JSON 编码的 PHP 响应的信息 JSON 响应包含对象 名称 姓名 包含 全名 姓氏 ID 我一直在使用columns以我想要的方式显示数据 但是我遇到了一个我无法弄清楚的问题
  • 如何使用 wallet:accounts:read 请求访问所有用户帐户?

    当我的应用程序请求时wallet accounts read permission使用 Coinbase API v2 用户会看到一个包含所有帐户的下拉列表 他只能在三个可能的钱包中选择一个 如果我的应用程序想要与所有三个钱包 例如 BTC
  • Python:为什么(“hello”是“hello”)评估为True? [复制]

    这个问题在这里已经有答案了 为什么 hello is hello 生产True在Python中 我读了以下内容here 如果两个字符串文字相等 则它们已被置于相同的位置 内存位置 字符串是一个不可变的实体 没有伤害可以 做完了 那么每个 P
  • 添加列之前如何检查列是否存在

    我有一个数据库 如果它不存在 我想向其中添加一列 如何使用 sqlite swift API 做到这一点 通常 如果要向现有表添加新列 您将需要一个迁移路径 您可以使用userVersion管理数据库架构版本的属性 if db userVe