原始SQL在rails数据库上插入远程ruby

时间:2013-03-26 03:45:40

标签: ruby-on-rails ruby database database-connection

我在将数据插入sqlite开发数据库时遇到问题。

我的应用有2个服务器,一个用于浏览浏览器(browserscraper),另一个用于服务客户端请求。这些都有生产和开发。

我正在设置开发以将最终的已删除数据插入到我的开发客户端请求服务器中但是我无法使插入工作。我怀疑这与正确地逃避内容有关,但我已经在谷歌上花了几个小时试图解决这个问题。

这是从我的抓取应用程序到我的远程客户端应用程序的插入

@sql_insert = "INSERT INTO #{@table} (`case_number`, `style_of_case`, `circuit`, `judge`, `location`, `disposition`, `date_filed`, `disposition_date`, `case_type`, 'lead_details', 'charge_details')"

@sql_values = " VALUES (#{self.case_number.to_blob}, #{self.style_of_case.to_blob}, #{self.circuit.to_blob}, #{self.judge.to_blob}, #{self.location.to_blob}, #{self.disposition.to_blob}, #{self.date_filed.to_blob}, #{self.disposition_date.to_blob}, #{self.case_type.to_blob},  #{self.lead_details.to_blob}, #{self.charge_details.to_blob});"

@db = SQLite3::Database::new('E:/Sites/aws/db/development.sqlite3')
@db.execute(@sql_insert + @sql_values + "COMMIT;")

终极查询看起来像这样(我知道非常难看)。我插入的最后两个是yaml

INSERT INTO lead_to_processes (`case_number`, `style_of_case`, `circuit`, `judge`, `location`, `disposition`, `date_filed`, `disposition_date`, `case_type`, 'lead_details', 'charge_details') VALUES (130025129, 130025129 - CITY, 1st(Jim, Counties), LOVEKAMP, KELLY LAREE, Schuyler, Plea Written, 03/19/2012, 03/19/201, Municipal Ordinance - Traffic,  ---
1-address_line_1: 6150 RICHLAND RD
1-address_line_2: ''
1-city: 'GEORGIA'
1-birth_year: '1955' 
1-is_alive: 1
, ---
1-Description: Not Available }
1-Code: '95220'
);

3 个答案:

答案 0 :(得分:2)

你在1999年没有攻击PHP,所以你不应该使用字符串插值来与你的数据库交谈。 SQLite3::Database#execute支持占位符,请使用它们;你的execute应该是这样的:

@db.execute("insert into #{@table} (case_number, style_of_case, ...) values (?, ?, ...)", [
    self.case_number.to_blob,
    self.style_of_case.to_blob,
    ...
])

这样,数据库界面将处理所有引用和转义等等。

答案 1 :(得分:0)

我不熟悉Ruby或SQLite,但纯粹在查看您的查询时,您的最后两个列名称引用了单引号错误。 'lead_details'和'charge_details'不应该在引号中,除非你像其他列名一样使用后退标记。

除此之外,您插入的值也未正确引用。大多数语言都提供了一个函数来适当地转义和引用数据库字符串。

我还建议您检查插件中的实际错误消息是什么,因为它应该有助于指出您在这种情况下遇到的问题。

答案 2 :(得分:0)

  

INSERT INTO lead_to_processes (case_number, style_of_case, circuit, judge, location, disposition, date_filed, disposition_date, case_type, 'lead_details', 'charge_details') VALUES (130025129, 130025129 - CITY, 1st(Jim, Counties), LOVEKAMP, KELLY LAREE, Schuyler, Plea Written, 03/19/2012, 03/19/201, Municipal Ordinance - Traffic, --- 1-address_line_1: 6150 RICHLAND RD 1-address_line_2: '' 1-city: 'GEORGIA' 1-birth_year: '1955' 1-is_alive: 1 , --- 1-Description: Not Available } 1-Code: '95220' );

看起来,从130025129 - CITY开始,您的输入值未被引号括起,因此查询解析器无法解析它。我会用单引号括住每个字符串值。