SQLite数据库查询(Python, Bottle)
SQLite database query (Python, Bottle)
我正在尝试创建一个函数,其中 returns 登录用户的名称(如果可以识别)或 None(如果不能)。我想通过从 Bottle 请求中的 cookie 中查找会话 ID(如果存在),并使用它在会话 table.
中查找用户来实现此目的
到目前为止我的代码:
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
数据库中的table:
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 []
参见cursor.fetchall
documentation:
Fetches all (remaining) rows of a query result, returning a list. Note that the cursor’s arraysize attribute can affect the performance of this operation. An empty list is returned when no rows are available.
由于 Python 中的空列表是一个 false-y 表达式,这通常效果很好 - 当不与 False/None 进行显式比较时。始终返回 a 列表还使迭代结果集(或检查长度)的代码更容易,因为不必完成 None 的特殊情况。
使用恰当命名的 fetchone
获得 单个 结果 记录 或 None.
我正在尝试创建一个函数,其中 returns 登录用户的名称(如果可以识别)或 None(如果不能)。我想通过从 Bottle 请求中的 cookie 中查找会话 ID(如果存在),并使用它在会话 table.
中查找用户来实现此目的到目前为止我的代码:
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
数据库中的table:
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 []
参见cursor.fetchall
documentation:
Fetches all (remaining) rows of a query result, returning a list. Note that the cursor’s arraysize attribute can affect the performance of this operation. An empty list is returned when no rows are available.
由于 Python 中的空列表是一个 false-y 表达式,这通常效果很好 - 当不与 False/None 进行显式比较时。始终返回 a 列表还使迭代结果集(或检查长度)的代码更容易,因为不必完成 None 的特殊情况。
使用恰当命名的 fetchone
获得 单个 结果 记录 或 None.