当使用flask - session结合SQLAlchemy将session存储到数据库中时,根据你的配置,会创建一个名为db_session的表(假设你在配置中设置SESSION_SQLALCHEMY_TABLE = 'db_session')。这个表的结构大致如下:
| 列名 | 类型 | 说明 |
|---|---|---|
id | String | 会话ID,唯一标识每个会话,前缀为配置中的SESSION_KEY_PREFIX(例如session:)加上实际的会话ID值。 |
session_data | LargeBinary | 序列化后的会话数据,包含了在应用中设置到session的所有键值对信息。 |
expiry | DateTime | 会话的过期时间。如果设置了SESSION_PERMANENT = True,关闭浏览器时会话会失效,但在某些情况下(例如服务器端的会话管理策略),也可能会设置一个具体的过期时间。 |
例如,假设你有一个应用,通过session["uname"] = "xiaoming"和session["age"] = 18设置了会话数据,并且SESSION_KEY_PREFIX = "session:",那么在db_session表中可能会有如下一条记录:
| 列名 | 值 |
|---|---|
id | session:123e4567 - e89b - 12d3 - a456 - 426614174000(这里123e4567 - e89b - 12d3 - a456 - 426614174000是一个示例会话ID) |
session_data | `b'\x80\x03}q\x00(X\x04\x00\x00\x00unameq\x01X\x08\x00\x00\x00xiaomingq\x02X\x03\x00\x00\x00ageq\x03K\x12u.' (这是经过序列化后的会话数据,具体内容因序列化方式而异) |
expiry | 2024 - 01 - 01 12:00:00(假设的过期时间) |
实际存储的session_data是经过序列化的二进制数据,在Python中,flask - session通常使用pickle模块进行序列化和反序列化。当应用需要获取会话数据时,flask - session会根据id从数据库中读取session_data,然后反序列化得到原始的会话数据。
要查看数据库中实际的数据,可以使用数据库客户端(如MySQL Workbench 连接到你的MySQL数据库,然后执行SELECT * FROM db_session;这样的SQL语句来查看表中的记录。
在代码层面,如果使用SQLAlchemy的inspect工具,也可以获取表结构信息,示例代码如下:
from sqlalchemy import inspect
# 假设db是已经初始化好的SQLAlchemy实例
inspector = inspect(db.engine)
columns = inspector.get_columns('db_session')
for column in columns:
print(column['name'], column['type'])
这段代码会打印出db_session表中每列的名称和类型。
1209

被折叠的 条评论
为什么被折叠?



