SQLite数据库查询(Python、瓶子)
我正在尝试创建一个函数,如果可以识别,则返回登录用户的名称;如果不能识别,则返回无。我想通过从瓶子请求中的cookie中查找会话id(如果存在)来实现这一点,并使用它在会话表中查找用户 到目前为止,我的代码是: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
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',)!='博巴卢巴'。我猜是因为它检索元组?元组与字符串不同。是否可以将其转换为字符串以便进行比较,或者是否有更好的方法?可以获取返回元组的第一个元素(对应于结果集中的第一列)。在这种情况下,您需要首先确保有结果。