我一直在努力一段時間來獲得批量插入在我的Rails設置中工作。我收到以下錯誤消息。批量插入Rails SQLite
的SQLite3 ::的SQLException:近 「」:語法錯誤: INSERT INTO令牌(article_id的,算, '出身', 'created_at', '的updated_at', '令牌')VALUES(42,1,」標題','2013-06-24 11:54:31 +0400','2013-06-24 11:54:31 +0400','5'),(42,1,'Title','2013- 06-24 11:54:31 +0400','2013-06-24 11:54:31 +0400','公司'),(42,1,'Title','2013-06-24 11:54 :31 +0400','2013-06-24 11:54:31 +0400','To'),(42,1,'Title','2013-06-24 11:54:31 +0400', '2013-06-24 11:54:31 +0400','看'),(42,1,'Title','2013-06-24 11:54:31 +0400','2013-06-24 11:54:31 +0400','In'),(42,1,'Title','2013-06-24 11:54:31 +0400','2013-06-24 11:54:31 + 0400','Big Data')
當我將上面的SQL字符串粘貼到SQLite pl用於Firefox的ugin並執行查詢,它工作正常。所以我認爲應該有一個問題,我在Rails中如何使用這個字符串。
我有以下設置。
- 紅寶石2.0
- 滑軌3.2.13
- sqlite3的1.3.7
- Ubuntu的12.04
這裏是做大量上傳方法。它需要2個參數。 1包含每個令牌的字符串標記和數字計數的哈希。第二個參數只是一個字符串。
該方法在Article類的實例上調用。所以self.id只是文章ID。
我也嘗試了通過activerecord-import gem進行批量上傳,並且它也失敗了,並且出現了與語法相似的錯誤消息。
def token_list(names,originvar)
vec =[]
names.each do |i, count|
time = Time.now
vec << "(#{self.id},#{count},'#{originvar}','#{time}','#{time}','#{i}')"
end
raw_sql = "INSERT INTO tokens (article_id,count,'origin','created_at','updated_at','token') VALUES #{vec.join(", ")}"
Token.connection.execute(raw_sql)
end
在此先感謝。
可能重複[是否有可能在SQLite數據庫一次插入多行?(http://stackoverflow.com/questions/1609637/is-it-it-it-it-insert-in-an-sqlite-database) – Matchu
(我知道它不是*很愚蠢,因爲這個問題不涉及Rails ,但SQLite語法的核心問題是相同的,一旦解決了,OP應該不需要Rails位的幫助。) – Matchu
另外,現在開始吧!你當前的代碼,如果它是適當的SQLite語法,將超級SQL注入(或者,如果你不擔心,因爲這是一個內部唯一的東西,超脆弱的漏洞缺乏逃逸)。考慮以另一種方式構建查詢。 – Matchu