Ruby Sqlite3“步骤”:约束失败(Sqlite3::ConstraintException)

Ruby Sqlite3“步骤”:约束失败(Sqlite3::ConstraintException),ruby,sqlite,Ruby,Sqlite,我正在尝试转换一些JSON数据,并使用Ruby将其插入SQLite3DB。JSON来自githubarchive.com我遵循了关于这个问题的建议:我的代码如下所示: Yajl::Parser.parse(open(input).read) do |event| r = CSV::Row.new(headers, []) flatmap({}, event).each do |k,v| v = (Time.parse(v).utc.strftime('%Y-%m-%d %T') rescue

我正在尝试转换一些JSON数据,并使用Ruby将其插入SQLite3DB。JSON来自githubarchive.com我遵循了关于这个问题的建议:我的代码如下所示:

Yajl::Parser.parse(open(input).read) do |event|
r = CSV::Row.new(headers, [])
flatmap({}, event).each do |k,v|
  v = (Time.parse(v).utc.strftime('%Y-%m-%d %T') rescue '') if k =~ /_at$/
  if r.include? k
    r[k] = v
  else

   puts "Unknown field: #{k}, value: #{v}"
        end
    end 
#   tmp << r.to_s
db = SQLite3::Database.open( "../github.sqlite" )
val = (['?'] * 186).join(',')
ins = db.prepare("insert into Sheet1_copy values (#{val})")
ins.execute(r.to_s)
有什么想法吗?
谢谢

您还需要一些东西来正确加载它。。这是一份工作副本:


请注意,我没有使用预先准备好的语句,因为在所有不同类型的事件中填充空行需要更多的练习。话虽如此,它的运行速度仍然相当快

为什么要使用CSV::Row?为什么不直接使用数组呢?从这里开始处理代码并尝试重新调整其用途:所以我需要它从JSON转到SQLite,然后从JSON直接转到SQLite,不使用CSV内容,这只会造成麻烦。@muistooshort我试过了,需要一些指导:js=File.openinput,r Yajl::Parser.parsejs do | event | print event db=SQLite3::Database.open../github.sqlite val=['?']*186.join','ins=db.prepareinsert to Sheet1_copy values{val}ins.executeevent end我猜在尝试将Ruby布尔值插入数据库之前,必须将它们转换为1和0。
gems/sqlite3-1.3.5/lib/sqlite3/statement.rb:67:in `step': constraint failed (SQLite3::ConstraintException)