sql - Scala,元组的sql插值
问题描述
我有一个在普通 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
推荐阅读
- linux - 当脚本作为 crontab 作业运行时,某些程序不是由 bash 脚本启动,但所有程序都可以通过手动运行 bash 脚本来启动
- shell - 在 shell 脚本中向 exec 1 添加自定义消息
- javascript - 'PERSISTENT' 变量存在于 Microsoft Edge 的窗口对象中,但不存在于 Mozilla Firefox 中。为什么?
- sql-server - 更新 3300 万行 - 优化
- sql - 从 Postgres 的数据集中获取每个 id 的最后一行和倒数第二行
- pandas - 根据多个条件在熊猫中创建新列
- python - 合并两个列标题并在 MultiIndex Dataframe python/在列名上方添加列中给出一个新名称
- javascript - 如何让渐进式 Web 应用程序在后台保持打开状态(Service Worker?)
- python-3.x - 尝试使用 Pyspark 加载 30GB SAS 文件时出错
- linux - 尝试在 Linux 中为 .maff 文件创建处理程序