python - web2py 中跨 session 的全局对象访问?

标签 python sqlite web2py cache-control

我是 webdev 新手,这几天计划用 web2py 编写一个 boradgame。

当开始编码时,我发现我不能轻松地使用全局变量。

出于演示目的,我想要一个可供许多玩家访问的 python 列表对象,我使用 sqlite 来使其工作。

数据库,(使用DAL('sqlite:memory:')不起作用),所以我尝试了文件方式,它按照我的想法工作:

memdb = DAL('sqlite://storage.sqlite')
memdb.define_table('room', Field('card_on_desk', 'blob'))

创建一个房间:

roomid = memdb.room.insert(card_on_desk=pickle.dumps(list()))
memdb.commit()

更改房间的card_on_desk字段:

record = memdb.room(roomid)
cards = pickle.loads(record.card_on_desk)
cards.append(','.join(c))
memdb(memdb.room.id==roomid).update(card_on_desk=pickle.dumps(cards))
memdb.commit()

有些大佬说有一个cache.ram()方法,我想知道如何做上面的事情。

等待您的答复。

S.Lott提到我没有描述使用 DAL('sqlite:memory:') 时会发生什么:

使用sqlite:memory而不是'sqlite://storage.sqlite',memdb插入在http请求中没问题,但没有任何保存,每次你调用memdb.room .insert() 返回我调用的时间,当请求完成时,内存中没有保存任何内容,memdb.room(1) 始终返回 None。

Anthony的建议比较有用,我会尝试使用这种方式,但有点难做到。

最佳答案

如果不需要持久化信息,那么可以使用session

session.myvariable

如果您需要坚持并希望通过缓存加快速度,那么您可以缓存选择:

def cache_db_select():
    logs = db().select(db.log.ALL, cache=(cache.ram, 60))
    return dict(logs=logs) 

关于python - web2py 中跨 session 的全局对象访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6107918/

相关文章:

javascript - 如何将url中的变量传递给pythonflask

iphone - 带有 phonegap 的 IOS 上的 SQLite

python - Web2Py - 如何使用带有 WHERE.. IN 关键字的 SELECT 查询

python - TypeError at/'str' object is not a mapping in django template

python - 写入 JSON 会产生 TypeError : dump() takes at least 2 arguments (1 given)

ruby-on-rails - 一个 ruby​​ on Rails 应用程序可以使用两个 sqlite3 数据库吗?

Android Listview 与 sqlite 和 CursorAdapter

javascript - 单击 RMB 时,jsTree 上下文菜单不显示在树节点上

python - Web2Py错误: invalid function blog/thanks

python - 在我们连接之前,浏览器似乎已经退出。输出为 : mkdir: cannot create directory