使用sqlite3 python进行条件查询

时间:2019-01-21 02:54:25

标签: python sqlite telegram-bot

此代码段是我当前正在开发的电报机器人的一部分。我使用了PyTelegramBotAPI包,并使用了@ bot.callback_query_handler()处理来自用户的回调查询。然后,我创建了一个函数,该函数使用以下代码为该特定用户打印出数据库中的最后一个条目:

calloc(n, sizeof(int))

此错误返回并指出ValueError:参数类型不受支持

def splitbill(user):
    row = c.execute('SELECT * FROM database WHERE user = (?) ORDER BY datetime DESC LIMIT 1', user).fetchall()
    print(row[0])

我用(user,)而不是(user)搜索并找到了此解决方案。但是我不知道为什么它起作用。有人可以启发我吗?谢谢!

3 个答案:

答案 0 :(得分:2)

sudo起作用的原因是因为(user,)方法期望一个元组,并且当您在没有逗号的情况下传递execute时,python会将其解释为(user)

您可以在python shell中很快验证这一点:

user

答案 1 :(得分:0)

(user)被解释为一个表达式,而(user,)始终是一个元组。

答案 2 :(得分:0)

在Python世界中,单元素tuples,结尾。例如:

>>> p=(1)
>>> print(type(p))
<type 'int'> #--note that this is taken as an int, irrespective of the braces.
>>> q=(1,)
>>> print(type(q))
<type 'tuple'>

函数c.excute可能接受tuple个占位符,这就是为什么您传入的(user)参数不被视为元组的原因。不过好问题。