如何在 nim 中构建 `select ... in` SQL 查询?
How to construct a `select ... in` SQL query in nim?
我正在使用 nim 和 db_sqlite
从数据库 table 中获取某些包含 _id
的行。例如:
for row in db.fastRows("SELECT * FROM t WHERE _id IN (?, ?)", @["1", "2"]):
echo row
这按预期工作,但是,末尾的序列是在运行时动态构建的,这意味着我在查询中需要可变数量的 ?
。我最终创建了一个带有问号的序列,加入它们,插入字符串并将其转换为数据库查询:
var qs : seq[string]
for id in ids:
qs.add("?")
let query_string = """SELECT * FROM t WHERE _id IN ()""" % join(qs, ",")
let query = SqlQuery(query_string)
for row in db.fastRows(query, ids):
echo row
有没有更好的方法在 nim 中构建 select ... in
查询?理想情况下只有一个 ?
在 SqlQuery
.
(就其价值而言,当前行为与我使用的其他语言类似)
您可以手动进行替换,这是使用 strformat 和 map 的一种方法
import strformat,db_sqlite,sequtils,strutils
#assuming ids is a seq[string] here
let query = sql(&"SELECT * FROM t WHERE _id IN ({ids.map(dbQuote).join(\",\")})")
for row in db.fastRows(query):
echo row
我正在使用 nim 和 db_sqlite
从数据库 table 中获取某些包含 _id
的行。例如:
for row in db.fastRows("SELECT * FROM t WHERE _id IN (?, ?)", @["1", "2"]):
echo row
这按预期工作,但是,末尾的序列是在运行时动态构建的,这意味着我在查询中需要可变数量的 ?
。我最终创建了一个带有问号的序列,加入它们,插入字符串并将其转换为数据库查询:
var qs : seq[string]
for id in ids:
qs.add("?")
let query_string = """SELECT * FROM t WHERE _id IN ()""" % join(qs, ",")
let query = SqlQuery(query_string)
for row in db.fastRows(query, ids):
echo row
有没有更好的方法在 nim 中构建 select ... in
查询?理想情况下只有一个 ?
在 SqlQuery
.
(就其价值而言,当前行为与我使用的其他语言类似)
您可以手动进行替换,这是使用 strformat 和 map 的一种方法
import strformat,db_sqlite,sequtils,strutils
#assuming ids is a seq[string] here
let query = sql(&"SELECT * FROM t WHERE _id IN ({ids.map(dbQuote).join(\",\")})")
for row in db.fastRows(query):
echo row