Rails 中 Postgresql 的准备语句

2024-01-02

现在我正在从 SQLite 迁移到 Postgresql 的过程中,遇到了这个问题。以下准备好的语句适用于 SQLite:

id = 5
st = ActiveRecord::Base.connection.raw_connection.prepare("DELETE FROM my_table WHERE id = ?")
st.execute(id)
st.close

不幸的是它不能与 Postgresql 一起工作 - 它在第 2 行抛出异常。 我正在寻找解决方案并遇到了这个:

id = 5
require 'pg'
conn = PG::Connection.open(:dbname => 'my_db_development')
conn.prepare('statement1', 'DELETE FROM my_table WHERE id = $1')
conn.exec_prepared('statement1', [ id ])

这个在第 3 行失败。当我像这样打印异常时

rescue => ex

前包含这个

{"connection":{}}

在命令行中执行 SQL 是可行的。知道我做错了什么吗?

提前致谢!


如果你想使用prepare像这样,那么你需要进行一些更改:

  1. PostgreSQL 驱动程序希望看到编号占位符($1, $2,...)不是问号,您需要为准备好的陈述命名:

     ActiveRecord::Base.connection.raw_connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
    
  2. 调用顺序为prepare http://rubydoc.info/gems/pg/PG/Connection#prepare-instance_method其次是exec_prepared http://rubydoc.info/gems/pg/PG/Connection#exec_prepared-instance_method:

    connection = ActiveRecord::Base.connection.raw_connection
    connection.prepare('some_name', "DELETE FROM my_table WHERE id = $1")
    st = connection.exec_prepared('some_name', [ id ])
    

上述方法适用于我的 ActiveRecord 和 PostgreSQL,你的PG::Connection.open如果连接正确,该版本应该可以工作。

另一种方法是自己引用:

conn = ActiveRecord::Base.connection
conn.execute(%Q{
    delete from my_table
    where id = #{conn.quote(id)}
})

这就是 ActiveRecord 通常在您背后做的事情。

直接与数据库交互对于 Rails 来说往往会有点混乱,因为 Rails 人认为您不应该这样做。

如果你真的只是想在不受干扰的情况下删除一行,你可以使用delete http://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-delete:

delete()

[...]

只需使用 SQL 删除该行DELETE记录主键上的语句,并且不执行任何回调。

所以你可以这样说:

MyTable.delete(id)

你会发送一个简单的delete from my_tables where id = ...进入数据库。

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

Rails 中 Postgresql 的准备语句 的相关文章

  • 使用函数的 SQL 查询 - 如何获取列表的最大计数

    如何查询 MAXIMUM COUNT 交易次数 我的代码如下 SELECT customer id COUNT customer id FROM rental GROUP BY customer id HAVING MAX COUNT cu
  • 文件位置 Rails 7 中的 Javascript 与样式表

    在使用导入映射功能的新默认 Rails 7 应用程序中 Javascript 存储在app javascript 而 CSS 位于app assets stylesheets 它们不仅位于不同的层次结构级别 而且javascript是奇异的
  • Mac 上用户“postgres”的密码身份验证失败

    我在创建新的 psql 用户时遇到问题 因为我无法以 postgres 身份登录 psql 我已尝试过 1 sudo u postgres psql 2 sudo u postgres createuser img site P s e 他
  • Oracle REGEXP_INSTR() 和“a-z”字符范围与预期不匹配

    我想用REGEXP INSTR 在 oracle 数据库中检查小写 大写字符 我知道 upper and lower POSIX 字符类 但我选择了a z这给了我非常奇怪的结果 我不明白 有人可以解释一下吗 SELECT REGEXP IN
  • 替换字符串中的多个字符,而不使用任何嵌套替换函数

    我的表中存储了一个方程 我一次获取一个方程 并希望将所有运算符替换为任何其他字符 输入字符串 N 100 6858 6858 N 100 0 2 N 35 运算符或模式 替换字符 输出字符串 N 100 6858 6858 N 100 0
  • 如何在 MySQL 中构建跨数据库查询?

    我在同一台服务器上有两个数据库 谷歌给了我一些提示 但我找不到任何 官方 的东西 有人可以向我指出解释如何执行此操作的文档吗 使用 PHP 进行解释也很有用 谢谢 我在同一台服务器上有两个数据库 如何在 MySQL 中构建跨数据库查询 您可
  • mysql GROUP_CONCAT 重复项

    我从 farmTOanimal 表中进行连接 如下所示 有一个类似的farmTotool表 id FarmID animal 1 1 cat 2 1 dog 当我在视图中加入表时 我得到的结果如下所示 FarmID animal tool
  • 使用“ember-rails”将路由从 Rails 迁移到现有 Rails 应用程序的 Ember

    将 gem ember rails 用于现有的 Rails 应用程序 我正在尝试使用 Ember 路由一个资源 很多人告诉我这段代码应该可以工作 但事实并非如此 我想突破学习曲线并使这项工作成功 但我需要一些帮助 Error Routing
  • Rails 中对多个域/子域的支持

    我有一个 Rails 应用程序 它的设置与 Tumblr 类似 也就是说 您可以选择 1 子域名托管 your username myapp com 2 域名托管 your username com 两者都会转发到使用我的应用程序创建的该用
  • 带 Rails 6/Webpack 的 Gmap

    我正在尝试让以前与早期版本的 Rails 一起使用的 Google 地图设置使用 Rails 6 显示 显然 Rails 6 现在使用 webpack 来处理 javascript 资源 并且我无法让我的应用程序识别用于识别的 Gmaps
  • 如何将属性保存到 has_many :通过连接表,没有现有记录可供构建

    我有一个表单 可以使用以下命令创建新的子记录和新的父记录accepts nested attributes for 孩子和家长都有一个has many through像这样的关联 class Child lt ActiveRecord Ba
  • 一张表中按最大日期过滤重复行的 SQL 查询

    我有一个 SQL 数据库 persons 它具有基于 IDNum 列的重复条目 我需要查询条目并仅根据最新创建日期显示行或重复条目 这是查询 SELECT IDNum PersonPGUID CreatedDateTime FirstNam
  • postgresql 选择不同的最新记录

    我有一个像这样的表 id fkey srno remark date 1 A001 1 2 A001 2 3 A002 1 4 A003 1 5 A002 2 我想要基于 max srno 的不同最新记录 例如 2 A001 2 4 A00
  • 是否可以禁用特定 jQuery Ajax 调用的 Turbolinks 以防止页面刷新和滚动?

    我有一个 Rails 5 应用程序 非常想使用 Turbolinks 在应用程序中 有几个 PATCH ajax 调用 它们只是用新数据更新服务器 但不需要担心更新页面的状态 每当这些 ajax 请求返回时 Turbolinks 就会刷新页
  • Rails 4 单选按钮表单助手,true 不验证

    我在 needs dist 上附加了简单的是或否单选按钮 当我提交表单时选择 否 它工作得很好 但是当我选择 是 时 它会抛出验证错误吗 它仅在 needs dist gt true 时有效 Model validates presence
  • SQL。 SP 或函数应计算周五的下一个日期

    我需要编写一个存储过程来返回给定日期的下周五日期 例如 如果日期是 05 12 2011 那么它应该返回下周五日期 05 13 2011 如果您通过 05 16 2011 那么它应该返回日期是 5 20 2011 星期五 如果您将星期五作为
  • 使用 Paperclip 保存文件而不上传

    我有一个简短的问题 是否可以保存文件而不实际通过表单上传 例如 假设我正在查看电子邮件中的附件 并且我想使用回形针保存它们 我该怎么做呢 我是否必须在某处手动调用 save file 或类似的东西 任何帮助将非常感激 我有一个 rake 任
  • Rails 3.2 子域和设计

    我有一个应用程序 用户可以登录到他们的公司子域 我用的是设计 此代码将用户从根域重定向到子域 def after sign in path for resource or scope scope Devise Mapping find sc
  • 根据最大值连接表

    这是我正在谈论的内容的一个简化示例 Table students exam results id name id student id score date 1 Jim 1 1 73 8 1 09 2 Joe 2 1 67 9 2 09 3
  • 以 Rails 形式处理 MongoMapper EmbeddedDocument

    首先 我对一般编程和 Rails 都是新手 我选择 Rails 是因为它看起来是一种很容易上手的语言 对于我的项目 我将 MongoMapper 与 Rails 结合使用 我正在尝试以与文档相同的形式处理嵌入文档 我有以下模型 class

随机推荐

  • 生命周期:ViewBag、TempData、ViewData 和 Session [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 这些对于存储数据很有用 会话将在网络服务器设置的时间后销毁 Viewbag 和 ViewData 与视图一样工作 并在重定向时被销毁 临时数
  • 为什么带有引用程序集的 VS2012 项目无法自动定位 4.0

    在 Visual Studio 2012 C 控制台应用程序中 我将 NET Framework Target 从 4 5 降级到 4 0 安装了两个框架的 Win 7 Pro 然后我引用一个程序集 该程序集通过警告抱怨以下内容 The p
  • Scala 中的“副作用词法闭包”与函数

    In 他的回答的评论部分 https stackoverflow com questions 4262241 how to return a function in scala 4262932 comment4621217 4262932
  • 从powershell执行单向wcf服务操作

    我有一个计划任务 每小时执行一个 powershell 脚本 powershell 脚本必须调用单向 WCF 服务操作 本质上它只需要开始一项操作 我的问题是我该怎么做 我认为仅执行 url 实际上就会启动请求 但显然这是不正确的 这是我试
  • 对数组 C 进行部分排序

    我有一个如下所示的数组 int array 4 53 3 65 7 43 9 54 0 72 0 0 我只是想知道我可以使用什么方法对该数组进行部分排序 以将前三个最大的双精度数放在前面 我正在寻找最有效的方法来获取该数组中前三个最高的数字
  • 我可以在源服务器和 cloudflare 服务器之间使用 HTTP/2 吗?(Apache)

    我尝试这样做 但是当我绕过我的域 A 记录时 协议 h2 正在工作 浏览器和 apache 日志中一切正确 当我在域上打开 cloudflare 时 浏览器工作正常 我知道 CF 正在与客户端使用 HTTP2 协议 但我在 apache 日
  • 当多个线程循环运行时索引如何受到影响

    我试图编写一个运行 5 个线程并相应地打印其索引的程序 下面是代码 include
  • Github API:如何获取以给定语言编写的所有存储库

    我能够使用 JSON 格式的 v2 获取用给定语言标记的所有 github 存储库github API http developer github com v3 但是这个版本已被弃用 https github com blog 1160 g
  • PHP/MySQL 时间戳和时区

    如果我使用 MySQL 中的 NOW 函数获取当前时间戳 我可以通过 php 获取该字段并给出不同时区的时间吗 基本上将当前时区的当前时间转换为另一个时区 您可以使用DateTimeZone http www php net manual
  • 从 ctypes Windll 获取错误消息

    我正在尝试使用 Python 脚本来更改 Windows 7 计算机上的壁纸 如果重要的话 我会从 node webkit 应用程序调用脚本 缩短的脚本如下所示 result ctypes windll user32 SystemParam
  • 使用 R 中的 xlsx 包更新 Excel 电子表格数据

    我有一个与 R 中的 xlsx 包相关的查询 我知道如何使用包中的大部分函数 并且到目前为止还没有遇到任何问题 我将首先显示我的代码 然后提出我的问题 Code Section1 library xlsx data1 lt iris dat
  • 重复条目:com/google/android/gms/internal/zzqv.class Android Studio

    在我的项目中 我已经实现了游戏服务游戏 首先我尝试添加 compile com google android gms play services 10 0 1 但我遇到了一些麻烦 我找到的解决方案是仅编译所需的库compile com go
  • Wi-Fi Direct 和 iOS 支持

    我想用Wi Fi Direct在解决方案中 但我不确定哪些平台支持它 Does Wi Fi Direct取决于 iPhone iOS 版本 我可以开发一个应用程序吗Wi Fi Direct运行 iOS 8 的 iPhone 4s 上的功能
  • Javascript 中捕获表单提交的事件是什么?

    这里有几个问题 我想知道我应该使用什么事件在表单提交时执行一些 Javascript 以进行一些验证 完成验证后 如何使用 Javascript 提交表单 假设您有一个名为myForm var form document getElemen
  • 如何计算行的平均值,同时排除数据框中行的零值

    我正在尝试计算数据框中每一行的平均值 每行都有零 我想从计算中排除这些 我不想删除整行 而只想删除零并计算每行中剩余值的平均值 如果行的值全部为零 则结果应为零 怎么样 nzmean lt function x if all x 0 0 e
  • 我可以在 中使用占位符吗

    我可以使用占位符吗
  • 无法查看 s3 上传的图像文件

    我正在使用 s3 上传图像文件 但每当我尝试使用 URL 以及从 s3 控制台下载时 都会下载图像文件 但是 图像查看器将看不到它 它只是显示不兼容的文件类型 myS3Function uploadFile request body fil
  • .lib 和 .dll 向后兼容性

    我目前有一个 VS6 非托管 C 库 以 lib 或 dll 形式提供 我想升级到 VS2010 但仍有 VS6 VS2005 和 VS2008 中的用户 VS2010 中内置的 lib 或 dll 可以在 VS6 VS2005 或 VS2
  • sequelize.query() 返回相同的结果两次

    我正在使用nodejs项目工作sequelize用于连接mysql数据库 我也在使用续集值 https www npmjs com package sequelize values用于从 Sequelize 实例获取原始数据 我写了下面的代
  • Rails 中 Postgresql 的准备语句

    现在我正在从 SQLite 迁移到 Postgresql 的过程中 遇到了这个问题 以下准备好的语句适用于 SQLite id 5 st ActiveRecord Base connection raw connection prepare