【问题标题】:How to use Quill infix with raw SQL correctly?如何正确使用带有原始 SQL 的 Quill 中缀?
【发布时间】:2020-06-26 00:16:49
【问题描述】:

我正在处理一个 Quill 项目,突然间我想执行原始 SQL。我参考了文档并学习了如何去做。 当我执行下面的行时,它工作得很好......

def getProjectsFromSql: Future[List[(Index, String)]] ={
    val rawQuery = quote(
        infix"""SELECT * FROM Project""".as[Query[Project_True]]
    )

    val result = ctx.run(rawQuery)
    result
  }

但是当我执行下面的行时,它给出了错误...

def getProjectsFromSql: Future[List[(Index, String)]] ={
    val rawQuery = quote(
        infix"""SELECT project_id, name FROM Project""".as[Query[(Int, String)]]
    )

    val result = ctx.run(rawQuery)
    result
  }

错误

com.github.mauricio.async.db.mysql.exceptions.MySQLException: Error 1054 - #42S22 - Unknown column 'x._1' in 'field list'

我无法确定错误的原因。我想快速解决这个问题。 (我的数据库是mysql)

【问题讨论】:

  • 嗨 Dushyantha Wijesinghe,我有一个与上述相关的问题。不是将SELECT project_id, name FROM Project 放入中缀,如果我将它分配给 val 说 myQuery ,然后用那个 val 替换中缀内的查询,可以吗?因为我的查询将是动态的,所以我想首先将其生成为字符串,然后将其提供给中缀。但是它不起作用。你能帮忙吗?我已经在这里问过了。 stackoverflow.com/questions/60200859/… 提前致谢。
  • 我也发现了类似的错误。如果我从文档中粘贴相同的查询,我会收到此错误

标签: mysql sql scala quill


【解决方案1】:

错误背后的原因是Quill根据正在读取的类的字段名来确定表列名。元组的字段名称是 _1_2,所以这就是 Quill 用于列名称的名称。

您可以通过定义新案例类而不是使用元组来解决此问题,并将字段命名为与列相同。或者您可以更改 sql 以将列名设置为 _1 和 _2 - 这是一个很好的方法,因为我们知道 _1 和 _2 是元组的预期列名。

【讨论】:

    猜你喜欢
    • 2018-01-27
    • 2012-01-31
    • 2021-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多