1

我试图转义红宝石字符串中的单引号。我使用这个字符串作为插入查询将数据推送到 postgresql 中。

将生成的查询如下所示:-

str = insert into table field1,field2 values 'Gaurav's', 'Scooter'

我试着用

str.gsub("/'/",\\\\')

但这没有用。

我总是得到的错误是: Syntax Error Near s:

我想我需要一个正则表达式来转义两个单引号内的单引号,但不确定。

我该如何解决?谢谢你。

4

2 回答 2

2

您应该使用准备好的语句。准备好的语句有助于提高您的速度。查询由数据库解析一次。它们还可以帮助您避免在尝试时进行手动转义。

f1_val = "Gaurav's"
f2_val = "Scooter"

# conn is your connection object
conn.prepare('givethisqueryaname', "INSERT INTO table field1,field2 VALUES ($1,$2)")
conn.exec_prepared('givethisqueryaname',[f1_val, f2_val])

如果给定字段名称和字段值作为字符串,则可以执行此操作。

fieldStr = "field1,field2"
valuesStr = "Gaurav's, Scooter"
arr = valuesStr.split(",")
conn.prepare('insert_x', "INSERT INTO table #{fieldStr} VALUES ($1,$2)")
conn.exec_prepared('insert_x', arr)
于 2012-12-17T09:31:40.080 回答
0

如果您要转义的单引号始终位于“s”前面,则此方法有效

1.9.3p125 :020 > str = "insert into table field1,field2 values 'Gaurav's', 'Scooter'"
 => "insert into table field1,field2 values 'Gaurav's', 'Scooter'" 
1.9.3p125 :021 > str.gsub("'s","-s")
 => "insert into table field1,field2 values 'Gaurav-s', 'Scooter'" 

您可以使用单引号(')和双引号(“)之间的区别。

于 2012-12-17T09:34:58.943 回答