簡體   English   中英

Ruby數組作為純SQL查詢的參數

[英]Ruby array as parameter to a plain SQL Query

我正在構建一個命令行應用程序,需要在各種postgresql數據庫中連接,並在那些准備語句中執行不同的查詢。 在特定查詢中,我需要將IN子句與ActiveRecord的connection_raw方法結合使用。 我的代碼是這樣的:

ActiveRecord::Base.connection_raw.prepare('read_publications', "UPDATE publications SET readed = TRUE WHERE id IN ($1);") 

之后,我嘗試執行此查詢:

ActiveRecord::Base.connection_raw.exec_prepared('read_publications', [1,2,3,4])

問題是這不起作用。 查詢運行時引發以下錯誤:

沒有將Array隱式轉換為Integer

我做錯了什么? 存在一種方式,我可以將此數組轉換為IN子句可以理解的值?

如果您使用的是原始連接,則無法使用ActiveRecords傳遞數組。 ActiveRecord為您做一些預處理。 如果需要原始SQL,那么每個數組元素都需要一個參數。

arr = [1,2,3,4]
i = 1
param = []
arr.each { param.push(i); i+=1; }
sql = "UPDATE publications SET readed = TRUE WHERE id IN ($"+param.join(',$')+");"
ActiveRecord::Base.connection_raw.prepare('read_publications', sql)
ActiveRecord::Base.connection_raw.exec_prepared('read_publications', arr)

但是,文檔說數組參數必須采用某種格式:

https://deveiate.org/code/pg/PG/Connection.html#method-i-exec_prepared

params是SQL查詢的可選綁定參數的數組。 params數組的每個元素可以是:

形式的哈希:{:value => String(綁定參數的值):format => Fixnum(0表示文本,1表示二進制)}

請參閱類似的問題: 使用PostgreSQL使用ActiveRecord准備和執行語句

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM