web2py中整个会话的全局对象访问?

时间:2011-05-24 08:50:52

标签: 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的建议更有用,我会尝试使用这种方式,有点难以这样做。

1 个答案:

答案 0 :(得分:1)

如果您不需要保留信息,则可以使用会话

session.myvariable

如果你需要坚持并希望加速缓存,那么你可以缓存选择:

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