【问题标题】:ruby on rails sql statement errorruby on rails sql语句错误
【发布时间】:2011-04-11 01:41:30
【问题描述】:

大家好,我有一个模型直播,它在数据库中有两列,“user_id”和“activity_id”。非常直接。

现在,当我尝试将多条记录插入数据库时​​,我得到一条无效的 SQL 语句:

SQLite3::SQLException: near ",": syntax error: INSERT INTO livestreams (user_id, activity_id) 
          VALUES (1, 2), (101, 2)

代码来自insoshi,代码如下:

def do_livestream_insert(users_ids, activity_id)
      sql = %(INSERT INTO livestreams (user_id, activity_id) 
              VALUES #{values(users_ids, activity_id)})
      ActiveRecord::Base.connection.execute(sql)
end

def values(ids, common_value)
      common_values = [common_value] * ids.length
      convert_to_sql(ids.zip(common_values))
end

def convert_to_sql(array_of_values)
      array_of_values.inspect[1...-1].gsub('[', '(').gsub(']', ')')
end

为什么 Rails 会这样做? SQLlite 不支持一次插入多条记录吗?

我已重置数据库并重新填充它。

感谢您的帮助,非常感谢。

祝你有美好的一天, 斯特凡诺

【问题讨论】:

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


    【解决方案1】:

    SQLite did not support 多个记录插入直到版本 3.7.11

    【讨论】:

    • 我怎样才能使用 SQLite3 完成这样的事情?或者你会推荐使用 mysql 代替吗?
    • 最好的选择是在单个事务中插入多条记录(适当地更改do_livestream_insert)。但是如果你不需要 SQLite 的可移植性,你当然可以切换到 MySQL。
    • SQLite 3.7.11 版增加了对多行插入语句的支持。 sqlite.org/changes.html
    【解决方案2】:

    我建议将 do_livestream_insert 重新定义为 N 次插入

    【讨论】:

    • 开发可以,但生产呢? (我在征求你的意见)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-18
    • 2015-07-31
    • 1970-01-01
    • 2017-06-15
    相关资源
    最近更新 更多