我是 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/