【发布时间】:2012-11-19 16:10:25
【问题描述】:
我在尝试将 sqlite 查询传递给另一个函数时遇到问题。
问题是 sqlite 查询可能包含一个列表,因此我不能使用*args,因为它解包元组但随后忽略了列表,我试图传递给函数的示例查询:
'SELECT postname FROM history WHERE postname = ? COLLATE NOCASE', [u'Test']
所以在这种情况下,我可以在目标函数中使用 args 而不是 *args,但是我可能有一个不包含列表的 sqlite 查询,因此我不能总是这样做,例如
'SELECT * FROM history'
所以简而言之,我想我的问题是如何使用 args 成功地将 sqlite 查询传递给另一个函数,无论它是否包含列表?
【问题讨论】:
-
我认为最好的答案(如果可能的话)是确保你总是得到一个元组。请记住,您可以获得长度为 1 的元组 -
("SELECT * FROM histroy", )可以完美运行。 -
@Lattyware -- 为什么不把它作为答案发布呢?我不知道 sqlite,否则我可能会对此有所贡献,但如果你说的是正确的,它似乎确实比我的解决方案更好。
-
嗨 Lattyware,我已经尝试过您的解决方案,但是 sqlite 无法使用元组,我收到错误 ValueError: operation parameter must be str or unicode,因此我回到了我无法解压缩元组的问题当我松开列表时。
-
我并不是建议您将元组传递给函数,而是建议您始终解包参数,并将任何不是元组的参数设为长度为 1 的元组。