0

Rubyを使用してJSONデータを変換し、sqlite3 dbに挿入しようとしています。JSON は githubarchive.com から来ています。この質問に関するアドバイスに従いました: Ruby SQLite Insert の文字列をエスケープすると、私のコードは次のようになります。

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)

これの上部は、彼らの git プロジェクトから取られています。さて、これを任意のデータで実行しようとすると、

gems/sqlite3-1.3.5/lib/sqlite3/statement.rb:67:in `step': constraint failed (SQLite3::ConstraintException)

何かご意見は?ありがとう!

4

1 に答える 1

0

正しくロードするには、さらにいくつかのものが必要です。作業コピーは次のとおりです:https ://gist.github.com/2426614

プリペアドステートメントを使用していないことに注意してください。これは、さまざまな種類のイベントすべてで空の行を埋めるのに少し体操が必要になるためです。そうは言っても、それはそのままではかなり速く動作します。

于 2012-04-20T06:36:33.333 に答える