[英]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.