Rails 中 Postgresql 的准备语句

2024-04-19

现在我正在从 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 的准备语句 的相关文章

  • 是否可以使用 jQuery 从 SQL Server 检索数据?

    是否可以使用 jQuery 从 SQL Server 检索数据并使用 HTML 控件显示数据 jQuery 被设计为在浏览器环境中运行 所以这是一个具有 DOM 的环境 具有 JavaScript 支持 显然 等等 要从 MS SQL Se
  • 匹配 MySQL 中单词/后缀的相似/变体

    我如何匹配 MySQL 中单词的变体 例如搜索 accountancy 应匹配 accountant accountants accounting 等 我使用共享主机 因此无法向 MySQL 添加任何功能 例如 levenshtein 我想
  • 何时在 SQL 语句中使用单引号?

    我知道当我处理 TEXT 类型的数据时应该使用它 我猜是那些回退到 TEXT 的数据 但这是唯一的情况吗 Example UPDATE names SET name Mike WHERE id 3 我正在用 C 编写 SQL 查询自动生成
  • 正则表达式:匹配包含数字和字母的字符串,但不匹配仅包含数字的字符串

    Question 我希望能够使用单个正则表达式 如果可能 来要求字符串适合 A Za z0 9 但不允许 仅包含数字或 和符号的字符串 以符号开头或结尾的字符串 多个符号彼此相邻 Valid test 0123 t0e1s2t3 0123
  • Heroku上传-预编译资产失败

    我需要帮助 当尝试将我的应用程序上传到heroku时 我收到此错误 有人知道为什么吗 有几个是错的 谢谢 Using rake 10 1 0 Using tlsmail 0 0 1 Using uglifier 2 1 2 Your bun
  • 载波扩展白名单不工作

    这是一个类似的案例 但没有解决方案CarrierWave extension white list 似乎不起作用 https stackoverflow com questions 11348510 carrierwave extensio
  • 物化视图与表:有什么优点?

    我很清楚为什么物化视图比仅查询基表更可取 不太清楚的是与仅创建另一个具有与 MV 相同数据的表相比的优势 MV 的唯一优势真的只是易于创建 维护吗 MV 不是相当于具有匹配架构的表和使用 MV SELECT 语句的 INSERT INTO
  • 使用java将数据插入mySQL表

    I have a predefined table in a mySQL database 我正在努力将从用户输入的数据保存到数据库中 但我似乎无法将任何数据保存在数据库中 使用以下代码 我尝试更新数据库的第一行 ID 1 到 OTHER
  • 如何在不使用完整备份的情况下使用生产数据刷新 SQL Server 测试实例

    我有两台 MS SQL 2005 服务器 一台用于生产 一台用于测试 并且两台服务器的恢复模型均为 完整 我将生产数据库的备份恢复到测试服务器 然后让用户进行更改 我希望能够 回滚对测试 SQL 服务器所做的所有更改 应用自测试服务器最初恢
  • UNION ALL mysql 子句中的行默认顺序?..我的意思是,首先提取哪一行?

    例如 如果我有一个真正简单的查询 选择1 联合所有 选择2 然后通过 Perl 或 PHP 获取行 我会将 1 作为第一行 将 2 作为第二行吗 这种行为在任何地方都有描述吗 Thanx 没有默认顺序 无论是在表中还是在查询中 除非您使用
  • PDO 和 IS NOT NULL 函数

    我是 PDO 新手 我想知道是否有相当于 mysql 语句的语句来检查参数是否不为空 例如 SELECT FROM table WHERE param IS NOT NULL 我试过这个 pdo gt prepare SELECT FROM
  • Rails 6 + Capistrano - 没有这样的 puma.sock 文件

    拜托 我有一个大问题10多个小时了 每当我使用 Capistrano 和 Puma 在 Rails 中运行应用程序部署并重新启动 nginx 时 当我尝试访问我的 Web 时 我会看到此错误 在此输入图像描述 https i stack i
  • Rails:如何在setter方法中使父属性可用

    Context 我有一个company模型有很多projects 有很多tasks The company也有很多employees 这又具有许多tasks Schema Problem 我正在构建一个表单来创建一个项目 用户可以在其中添加
  • Rails form_for :remote=>true 没有调用 js 方法

    我不知道为什么这不起作用 我正在学习 Rails 我正在关注一本书 它说要这样做 div class field div div class field div
  • 在任何 PostgreSQL 语句(甚至不返回结果的语句)上调用 row_to_json(row)

    我正在寻找始终从 PostgreSQL 语句返回 JSON 表示的查询 即使没有returning 这是一个例子 WITH result AS insert into users name age values drew 42 select
  • SQLPLUS 保存到文件

    我必须为我的数据库类使用 SQLPLUS 我们的第一个作业是简单的保存 我按照说明进行操作 我正在使用 PuTTY 访问 sqlplus 在本练习中使用以下 SQL 命令 并尝试使用 SAVE 和 SPOOL 命令将 SQL 命令和输出保存
  • 文件上传字段导致 ActionController::InvalidAuthenticityToken 异常

    使用 Rails 4 并尝试使用 simple form 和回形针将文件字段添加到现有表单 这是表格的关键部分 一切正常 除非我实际提交带有上传文件的表单 然后 我得到这个 ActionController InvalidAuthentic
  • 构建复杂 NSCompoundPredicate 的最佳方法是什么?

    我需要建立一个NSPredicate有很多数据 例如 在 SQL 中我会执行如下操作 SELECT FROM TRANSACTIONS WHERE CATEGORY IN categoryList AND LOCATION IN locat
  • ruby on Rails 中的自动测试错误

    我运行了命令自动测试 这是我得到的错误 我正在关注 Hartl 的书 想知道这种冲突是否会发生 因为 Rails 现在附带了 ZenTest 还是其他东西 我怎样才能克服这个错误 我是 RoR 新手 Invalid gemspec in U
  • Rails Beta 请求注册并提供社交媒体分享奖励

    我想构建一个简单的测试版请求注册页面 当用户尽可能多地共享应用程序的链接时 用户将获得更早的奖励 这样的解决方案可以在 特伦维网站 用户输入电子邮件 用户通过其独特的代码获得独特的链接 用户在每次注册时分享此链接 这对他来说是 1 管理方法

随机推荐

  • 如何覆盖 SyliusCoreBundle 模型用户

    我尝试在模型用户 SyliusCoreBundle Model User 中添加一个新字段 电话 避免接触SyliusCoreBundle 我创建了一个新的捆绑包 ShopBundle 它位于其他 sylius 捆绑包旁边以覆盖基本用户类
  • ASP.NET 中的 Twitter API 集成

    目前我正在使用剃刀使用MVC4 5 我尝试将 Twitter API 集成到我的应用程序中 但没有成功 您能帮助我如何将 Twitter API 集成到我的应用程序中吗 我已经创建了 twitter API 详细信息如下 OAuth 设置
  • Swift 4 JSON Codable - 返回的值有时是一个对象,其他是一个数组

    我从 API 获取的数据返回单个对象 但当有多个对象时 它会返回同一键中的数组 对于我正在使用的当前模型 结构 当数组出现时解码会失败 这些结果是随机排序的 这意味着我不知道何时会收到对象或数组 有没有办法创建一个模型 考虑到这一事实 并可
  • 数据库设计 - 是否应该避免一对一关系? [复制]

    这个问题在这里已经有答案了 可能的重复 是否存在使用数据库 1 1 关系有意义的时候 https stackoverflow com questions 517417 is there ever a time where using a d
  • SourceTree - 变基 - 合并期间的错误

    我正在尝试做一些简单的事情 例如编辑先前提交的提交消息 检查git status I have nothing to commit working directory clean 然后 我单击提交并执行 SourceTree gt Repo
  • iOS UIPageViewController 页面控制不同步

    每当我滑动页面控制器并点击UIPageControl同时在底部向相反方向滑动 当前显示的页面和pageControl中的页码会不同步 有没有人遇到过这个奇怪的问题并解决了 如果您需要任何其他信息 请告诉我 刚刚查看了文档UIPageCont
  • 如何更新 Laravel 4 中现有的 Eloquent 关系?

    我正在尝试更新 Laravel 中一对多关系的关系 不幸的是我找不到任何相关文档 谁能帮我 这是我到目前为止所拥有的 class Account extends Eloquent public function users return t
  • scanf 的四边形和参数类型

    我用
  • 平均日期数组计算

    我想得到以下日期的平均值 我考虑过将所有数据转换为秒 然后对它们进行平均 但可能有更好的方法来做到这一点 date 2016 02 23 09 36 26 2016 02 24 10 00 32 2016 02 24 11 28 22 20
  • java.lang.NoSuchFieldException:使用反射时

    public static
  • 无法从 scm 存储库获取分支信息

    我在构建 Maven 项目时遇到以下错误 有解决这个问题的想法吗 ERROR Failed to execute goal org codehaus mojo buildnumber maven plugin 1 4 create defa
  • Symfony2,奏鸣曲:折叠组

    我一直在尝试做一些相对简单的事情 但这不起作用 我希望能够折叠奏鸣曲中的组以增强用户的体验 gt with MyGroup array collapsed gt true add MyField gt end 这是根据奏鸣曲改编的文档 ht
  • python 列表理解 double for

    vec 1 2 3 4 5 6 7 8 9 print num for elem in vec for num in elem lt this gt gt gt 1 2 3 4 5 6 7 8 9 这是在骗我 我知道 elem 是列表中的列
  • 在 Python Pandas 中使用 groupby 按列连接行

    而不是例如使用 group by 计算总和 我想连接同一组中的所有行 下面的代码应该只组合 连接行 而不是 sum 如果每组有 5 行 则新数据框的列数将是 5 倍 每列 x 5 例子 这是我现在拥有的数据框 Index Pool B C
  • 如何制作右结合中缀运算符?

    我有一个关联操作 gt gt 问题是它的成本线性取决于其左操作数的大小 所以由一系列组成的表达式n的应用 gt gt like a gt gt a gt gt a gt gt a gt gt a gt gt gt gt a 它的成本是二次方
  • 模态视图阻止其他视图旋转

    我的 MainViewController 中有这个方法 void willAnimateRotationToInterfaceOrientation UIInterfaceOrientation toInterfaceOrientatio
  • Powershell 远程处理 - 策略不允许委派用户凭据

    我是 powershell 新手 在使用凭据委派时遇到问题 我有以下脚本 session New PSSession myserver Authentication CredSSP Credential DOMAIN Administrat
  • 如何在 Ruby on Rails 中启用压缩?

    我在这里发布了类似的问题 使用 Rack Zippy 在 Heroku 中提供压缩资源 https stackoverflow com questions 25552802 serving compressed assets in hero
  • Grails Spring 安全角色和组

    我已经配置了我的 spring security 来与组一起工作 我使用此脚本来创建域类 grails s2 quickstart com yourapp User Role groupClassName RoleGroup 我假设一个用户
  • Rails 中 Postgresql 的准备语句

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