SQLite数据库查询(Python、瓶子)

SQLite数据库查询(Python、瓶子),python,sqlite,python-3.4,bottle,Python,Sqlite,Python 3.4,Bottle,我正在尝试创建一个函数,如果可以识别,则返回登录用户的名称;如果不能识别,则返回无。我想通过从瓶子请求中的cookie中查找会话id(如果存在)来实现这一点,并使用它在会话表中查找用户 到目前为止,我的代码是: def session_user(db): """try to retrieve the user from the sessions table return usernick or None if no valid session is present

我正在尝试创建一个函数,如果可以识别,则返回登录用户的名称;如果不能识别,则返回无。我想通过从瓶子请求中的cookie中查找会话id(如果存在)来实现这一点,并使用它在会话表中查找用户

到目前为止,我的代码是:

def session_user(db):
    """try to
    retrieve the user from the sessions table
    return usernick or None if no valid session is present
    """
    cursor = db.cursor()
    sessionid = bottle.request.get_cookie(COOKIE_NAME)
    usernick = None
    if sessionid:
        cursor.execute("SELECT usernick FROM sessions WHERE sessionid=?", (sessionid,))
        usernick = cursor.fetchall()
    return usernick
数据库中的表:

DROP TABLE IF EXISTS sessions;
CREATE TABLE sessions (
            sessionid text unique primary key,
            usernick text,
            FOREIGN KEY(usernick) REFERENCES users(nick)
);
当我在函数中使用当前代码时,我得到一个单元测试错误:

line 125, in test_session_user
    self.assertEqual(nick_from_cookie, None, "Expected None in case with invalid session id, got %s" % str(nick_from_cookie))
AssertionError: [] != None : Expected None in case with invalid session id, got []
见:

获取查询结果的所有(剩余)行,并返回列表。请注意,光标的arraysize属性可能会影响此操作的性能。当没有行可用时,将返回空列表

由于Python中的空列表是一个false-y表达式,因此在不执行显式比较时,这通常效果良好。始终返回一个列表也会使迭代结果集(或检查长度)的代码更容易,因为无需执行None的特殊情况


使用恰当命名的获取单个结果记录,或者不获取任何结果记录。

我的其余代码正确吗?抱歉,当使用我知道的fetchone时,我对python和Sqlite不太在行。get:138,在test_session_user self中。assertEqual(nick_from_cookie,nick)断言错误:('Bobalooba',)!='博巴卢巴'。我猜是因为它检索元组?元组与字符串不同。是否可以将其转换为字符串以便进行比较,或者是否有更好的方法?可以获取返回元组的第一个元素(对应于结果集中的第一列)。在这种情况下,您需要首先确保有结果。