SQLAlchemy Core:如何在LIMIT/OFFSET子句中使用bindparam?

3 投票
1 回答
1050 浏览
提问于 2025-04-18 01:08

这是我尝试过的代码片段

query = tbl_scores.select().limit( bindparam('lim') )

但是,我遇到了以下错误。

TypeError: int() argument must be a string or a number, not 'BindParameter'

有没有人能给个例子,说明如何在LIMIT/OFFSET中使用bindparam?

使用的环境是Python 2.7.5和SQLAlchemy 0.8.4


假设有一个网络接口,用来返回排名前的玩家及其排名。可以像这样构建一个带有绑定参数的查询,然后把它存储在一个线程本地的地方,这样多个请求就可以共享同一个预编译的查询。

# TypeError occurs here
a_thread_local_place.query = join(tbl_scores,
                          tbl_master_player,
                          tbl_scores.c.uid == tbl_master_player
                     ).\
                     select().limit(bindparam('lim'))

每次网络接口处理请求时,我想用这个预编译的查询来执行查询,像这样。

result = engine.connect().execute(
    a_thread_local_place.query,
    lim = 10,
)

1 个回答

2

现在你还不能这样做,不过这个问题已经被提出来了,正在修复中:

https://bitbucket.org/zzzeek/sqlalchemy/issue/3034/use-my-own-bindparam-for-querylimit

撰写回答