![](/img/trans.png)
[英]How to use Scala's Slick sql interpolation with owner/schema name-prefixes
[英]Scala, sql interpolation for tuples
我有一個看起來像普通 sql 中的查詢
Select * from persons
where (persons.first_name, persons.last_name)
in (('a', 'b'), ('c', 'd'))
我正在嘗試從 Scala 中執行此操作
val names = List(("James", "hasi"), ("Michael", "Myers))
sql""" Select * from ${table} where (first_name, last_name) IN ${names}""".stripMargin.map(...)
但是它失敗了,因為 scalikejdbc 不知道如何插入元組。
"PSQLException: Can't infer the SQL type to use for an instance scala.Tuple2"
知道如何實現這一目標嗎? 我想我總是可以將元組列表轉換為字符串,但問題是 Scala 會用單引號將其包裝起來,將所有內容都作為字符串處理。
我會將此作為答案發布,因為它以不同的方式解決了問題。 我最終在 scalikejdbc 中編寫了原始 SQL,而沒有轉義元組“名稱”
您可以通過使用 SQLSyntax 類來做到這一點
val a = SQLSyntax.createUnsafely(names)
sql"${a}" <- not escaped
嗨,我有兩個建議-
您是否嘗試過其他類型? 還是必須使用元組? 也許快速嘗試一個序列或一個集合等。
看起來您正在使用原始插值。 我不確定您正在使用的 API,但看起來您可能只想使用一個引號,例如 -
sql"Select * from ${table} where (first_name, last_name) IN ${names}".stripMargin.map(...)
編輯:
你可以嘗試映射列表還是太hacky了? 類似於names.map((fname, lname) => sql""" Select * from ${table} where first_name = $fname and last_name = lname""".stripMargin).for(r <- rs) yield r
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.