【问题标题】:SQL query does not work when executing from Rails console从 Rails 控制台执行时 SQL 查询不起作用
【发布时间】:2012-11-09 00:24:03
【问题描述】:

我正在尝试在我的 Rails 控制台中运行以下行:

ActiveRecord::Base.connection.execute "DELETE FROM recommendations WHERE place_id=4000000001267 AND recommender_id=2728498;UPDATE IGNORE recommendations SET place_id=4000000001267 WHERE place_id=4000000564630 AND recommender_id=2728498;"

它只是删除一条旧记录并重写另一条记录以进行合并。

Rails 控制台返回以下内容:

DELETE FROM recommendations WHERE place_id=4000000001267 AND recommender_id=2728498;UPDATE IGNORE recommendations SET place_id=4000000001267 WHERE place_id=4000000564630 AND recommender_id=2728498; ActiveRecord::StatementInvalid: Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPDATE IGNORE recommendations SET place_id=4000000001267 WHERE place_id=40000005' at line 1: DELETE FROM recommendations WHERE place_id=4000000001267 AND recommender_id=2728498;UPDATE IGNORE recommendations SET place_id=4000000001267 WHERE place_id=4000000564630 AND recommender_id=2728498; from /Users/huynguyen/.rvm/gems/ruby-1.9.3-p0/gems/activerecord-3.2.6/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:243:inquery'`

但是,当我在 Sequel Pro 中运行这个精确查询时,查询运行得非常好。知道发生了什么吗?

【问题讨论】:

  • @Greg 忽略任何错误并继续,因为我将运行多个查询。
  • 我过去遇到过类似的事情,请参阅 stackoverflow.com/questions/11127980/… 仍然没有得到明确的答案,但我最好的猜测是,当服务器运行时,为了更好地将 SQL 匹配到供应商。
  • @CyleHunter 我不得不更改我的代码来执行两个查询。请参阅下面的答案

标签: sql ruby-on-rails ruby-on-rails-3


【解决方案1】:

这可能与 AR 的 mysql 适配器默认没有执行多个查询有关吗?

对此的快速解决方法是将查询分成两个不同的,然后一个接一个地执行。并将它们包装成一个事务,当然:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-28
    • 1970-01-01
    • 2013-11-28
    • 1970-01-01
    • 2015-10-16
    • 2015-05-09
    • 2017-06-22
    • 2015-10-28
    相关资源
    最近更新 更多