将多个参数传递给 Racket 中的 SQLite 查询

Passing multiple parameters to an SQLite query in Racket

我试图将多个变量传递给 Racket 中的 sqlite 查询。

(define select-test
  (prepare dbconn "SELECT count(*) FROM All_data WHERE Season = ? AND Division = '?'"))
(define season 2019)
(define league "E0")
;(query-value dbconn select-test '(season league))
;(query-value dbconn select-test season league)

在线示例显示了列表和单独的变量作为查询的输入,但这些都不适合我。

我收到此列表的消息:

query-value: cannot convert given value to SQL type
  given: '(season league)
  type: parameter
  dialect: SQLite

或 'wrong number of parameters for query' 如果单独完成。

有人可以帮助正确的语法吗?

问题出在您的 SQL 上。本声明:

SELECT count(*) FROM All_data WHERE Season = ? AND Division = '?'

有一个参数(用于季节比较)。 '?' 只是一个包含问号的文字字符串。只需写成 ?,像这样:

SELECT count(*) FROM All_data WHERE Season = ? AND Division = ?

然后用两个参数调用它,像这样:

(query-value dbconn select-test season league)

顺便说一句,你可以用

仔细检查准备语句的参数数量
(length (prepared-statement-parameter-types select-test))

使用 SQLite,类型本身没有任何信息,但长度告诉您参数的数量。