2011-05-24 48 views
1

我是webdev的新手,这几天计划用web2py编写一个boradgame。在web2py中跨会话的全局对象访问?

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

为了演示的目的,我想要一个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()方法,我想知道如何做t他以上的东西。

等待你的答案。

S.Lott提到,使用DAL时,我没有描述发生了什么( 'sqlite的:内存:'):

使用sqlite:memory而不是 '源码://storage.sqlite',该memdb插件是一好吗http请求,但没有任何保存,每当你打电话给我时memdb.room.insert()返回我调用的时间,当请求完成时,没有任何内容保存,memdb.room(1)总是返回None。

Anthony的建议更有用,我会尽量使用这种方式,有点难以做到。

+0

“但它不会工作”?既然这没有意义,你会永远等待答案。也许你应该解释“但它不会工作”。 – 2011-05-24 10:22:33

+0

@ S.Lott好像你误会了我,抱歉我的坏描述。我的意思是'DAL('sqlite:memory:')'不起作用,文件的方式起作用。 – Gohan 2011-05-24 10:58:58

+0

@Gohan:你好像误解了我。抱歉含糊不清。 “不起作用”并不意味着什么。这是没有意义的。它不能被理解。你必须提供**实际**错误,你实际上**得到。摘要(“不起作用”)是不可接受的。事实(例如错误消息)是可以接受的。 – 2011-05-24 12:49:52

回答

1

如果没有需要坚持的信息,那么你可以,如果你需要坚持,并要加快​​与缓存的东西使用会话

session.myvariable 

,那么你就可以缓存选择:

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