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 的准备语句 的相关文章

  • Rails 5:验证复选框的接受

    我有一个带有一些嵌套字段的注册表单 在该表单中我添加了一个服务条款的复选框 我正在尝试验证复选框何时被选中 如果没有 则返回错误 validates acceptance of agreement allow nil gt true acc
  • 主页的 RefineryCMS 路线不起作用

    刚刚开始使用RefineryCMS 抱歉新手问题 它在本地运行良好 并幸运地部署在 Heroku Cedar 堆栈上 创建了一个名为 主页 的页面 pages home 响应良好 路线 rb root to gt pages home 并在
  • 如何在两个模型之间建立两个 has_many/belongs_to 关系?

    我有一个Project模型 以及一个Contact模型 项目模型有一个所有者和一个客户 两者都是Contacts 显然我遇到了一些不明确的事情 因为如果我有联系人并询问其项目 Rails 将不知道我询问的是它的项目是客户还是所有者 到目前为
  • 使用 psycopg2 在 python 中执行查询时出现“编程错误:语法错误位于或附近”

    我正在运行 Python v 2 7 和 psycopg2 v 2 5 我有一个 postgresql 数据库函数 它将 SQL 查询作为文本字段返回 我使用以下代码来调用该函数并从文本字段中提取查询 cur2 execute SELECT
  • PESSIMISTIC_WRITE 是否锁定整个表?

    只是为了确保我正确理解事情是如何运作的 If I do em lock employee LockModeType PESSIMISTIC WRITE 它会仅阻止该实体吗 employee 或整个表Employees 如果重要的话 我正在谈
  • MyBatis:在一个查询中通过注释收集

    我有一个 xml 映射器 一个选择映射器和一个结果映射器 它工作没有问题 但我想使用注释 我的映射器
  • 自加入表

    我有一张像这样的桌子 Employee name salary a 10000 b 20000 c 5000 d 40000 我想获取所有工资高于A工资的员工 我不想使用任何嵌套或子查询 在采访中被问及并暗示是使用自连接 我真的不知道如何实
  • 月份增量查询

    我想通过添加 1 个月来更新数据库中的月份 但我不知道如何在以下存储过程查询中添加月份 我不擅长 sql 请检查它 ALTER PROCEDURE dbo ChangePassword password varchar 20 epasswo
  • 检查 postgres 复制状态

    有人可以建议检查 postgresql 复制状态的步骤以及如何确定复制是否未正确进行吗 我们在 pgsql9 0 和 pgsql9 4 中使用流复制 我通常使用以下 SQL 查询来检查 Postgres v11 的状态 关于主人 selec
  • XML 解析:格式良好的检查:未声明的实体

    我正在使用 SSMS 2008 但收到以下错误 你知道这意味着什么吗 Msg 9448 Level 16 State 1 Line 4 XML parsing line 1 character 89 well formed check un
  • 执行带有 EXCEPTION 的 PostgreSQL 查询会导致两条不同的错误消息

    我有一个 PostgreSQL 查询 其中包含事务和列重复时的异常 BEGIN ALTER TABLE public cars ADD COLUMN top speed text EXCEPTION WHEN duplicate colum
  • 使用 Passenger + Apache 相对于 Webrick 的优势

    我想说服我的管理层 使用 Apache 乘客设置是继续生产的方法 而不是使用 webrick 或 mongrel 我从网上找到了一些观点 如果您能添加您的想法 那将非常有帮助 因为这将有力地帮助我表达我的观点 欢迎提供技术细节 如果您有任何
  • 有没有办法使用 Rspec/Capybara/Selenium 将 javascript console.errors 打印到终端?

    当我运行 rspec 时 是否可以让 capybara selenium 向 rspec 报告任何 javascript console errors 和其他异常 我有一大堆测试失败 但当我手动测试它时 我的应用程序正在运行 如果不知道仅在
  • Google BQ:运行参数化查询,其中参数变量是 BQ 表目标

    我正在尝试从 Linux 命令行为 BQ 表目标运行 SQL 此 SQL 脚本将用于多个日期 客户端和 BQ 表目标 因此这需要在我的 BQ API 命令行调用中使用参数 标志 parameter 现在 我已经点击此链接来了解参数化查询 h
  • SQL Server 上的语法错误

    这可能是一个愚蠢的语法错误 但我只是继续阅读我的程序 但我无法弄清楚我的错误在哪里 消息 156 第 15 级 状态 1 第 41 行关键字附近的语法不正确 为了 这是我的代码 alter procedure LockReservation
  • 将 Rack::Deflater 插入机架中的哪个位置?

    我目前有以下内容 use Rack Rewrite use Rack Cache verbose gt true metastore gt memcached localhost 11211 rack cache meta entityst
  • Rails 3 SSL 路由从 https 重定向到 http

    这个问题与此相关SO 问答 rails 3 ssl deprecation https stackoverflow com questions 3634100 rails 3 ssl deprecation建议使用routes rb和类似的
  • 即使删除了某些行,使用种子值进行随机排序也会再次返回相同的集合吗?

    我正在编写一个分页 API 通过设置随机种子值来给出随机结果 除非用户想要洗牌结果 否则结果将是相同的 但如果用户想要洗牌 我将重新创建种子值 以便它将返回一组不同的记录 我的问题是 如果我从数据库中删除一条记录 即使种子相同 由于元素长度
  • 用于验证目的的动态查找方法

    我正在使用 Ruby on Rails 3 0 7 我想在运行时查找一些记录以进行验证 但为该查找方法传递 设置一个值 也就是说 在我的班级中 我有以下内容 class Group lt lt ActiveRecord Base valid
  • rspec 中的模拟方法链

    有一系列方法可以获得user目的 我试图模拟以下内容以返回user in my Factory Girl current user AuthorizeApiRequest call request headers result 我可以模拟该

随机推荐

  • 生命周期: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