我是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的建议更有用,我会尝试使用这种方式,有点难以这样做。
答案 0 :(得分:1)
如果您不需要保留信息,则可以使用会话
session.myvariable
如果你需要坚持并希望加速缓存,那么你可以缓存选择:
def cache_db_select():
logs = db().select(db.log.ALL, cache=(cache.ram, 60))
return dict(logs=logs)