Ruby on rails 原始SQL插入远程RubyonRails数据库

Ruby on rails 原始SQL插入远程RubyonRails数据库,ruby-on-rails,ruby,database,database-connection,Ruby On Rails,Ruby,Database,Database Connection,我在将数据插入sqlite开发数据库时遇到问题 我的应用程序有两个服务器,一个用于抓取浏览器(browserscraper),另一个用于处理客户端请求。每一种都有其产生和发展的过程 我正在将开发设置为将最终刮取的数据插入到我的开发客户机请求服务器中,但是我无法使插入正常工作。我怀疑这与正确地转义内容有关,但我在谷歌上花了几个小时试图弄明白这一点 这是从我的抓取应用程序到我的远程客户端应用程序的插入 @sql_insert = "INSERT INTO #{@table} (`case_numbe

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

我的应用程序有两个服务器,一个用于抓取浏览器(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'
);

我不熟悉Ruby或SQLite,但纯粹看一下您的查询,您的最后两个列名被单引号错误地引用了lead_details和charge_details不需要加引号,除非您像其他列名一样使用反勾号

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

我还建议检查插入的实际错误消息是什么,因为它可以帮助您在这种情况下找到问题所在

插入前置至前置流程(案例编号、案例类型、电路、法官、位置、处置、提交日期、处置日期、案例类型、“前置详细信息”、“收费详细信息”)值(130025129、130025129-城市、第一(吉姆、县),LOVEKAMP,KELLY LAREE,Schuyler,书面抗辩,2012年3月19日,201年3月19日,市政条例-交通,---1-地址线1:6150 RICHLAND路1-地址线2:“'1-城市:'GEORGIA'出生年份:'1955'1-是否活着:1,---1-描述:不可用,}1-代码:'95220'


看起来,从
130025129-CITY
开始,您的输入值没有用引号括起来,因此查询解析器无法对其进行解析。我会用单引号将每个字符串值括起来。

您在1999年没有入侵PHP,因此不应该使用字符串插值与数据库对话。支持占位符,请使用它们;您的
execute
应该如下所示:

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

这样,数据库界面将为您处理所有的报价和转义等问题。

谢谢,我做到了,而且做到了!对于那个些遇到这种情况的人来说,尝试使用mu解决方案太短,仍然会遇到问题。请注意,最后的部分实际上是变量,唯一的串接部分是插入。这让我一开始感到困惑,因为我没有付钱attention@Austio:有什么我需要澄清的吗?或者误解只是双引号字符串有点长的副作用?这完全是我的误读(以及上面的响应中的错误输入),当我最初使用您的响应时,它的形式是@db.execute(“插入到{@table}(case_number)值(?)[{{self.case_number.to_blob}…)请注意,我遗漏了告诉SQLite3正确方法的逗号。在我更仔细地看了上面写的内容之后,我意识到我错过了,这使得第二部分成为了一个新的参数。你写它的方式是正确的,我只是忽略了它是两个参数