глобальный доступ к объекту через сеанс в web2py? - PullRequest
1 голос
/ 24 мая 2011

Я новичок в webdev, в эти дни планирую написать 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 (), я хочу знать, как это делать.

ждите ваших ответов.

S.Lott упомянуть, что я не описал, что происходит при использовании DAL ('sqlite: memory:'):

с использованием sqlite:memory вместо 'sqlite: //storage.sqlite' вставка memdb в порядке запроса http, но ничего не сохраняется, каждый раз, когда вы звоните memdb.room.insert(), возвращается время, которое я вызывал, и когда запрос конец, ничего не сохранено в памяти, memdb.room (1) всегда возвращает None.

Энтони совет более полезен, я постараюсь использовать его, немного сложно сделать.

1 Ответ

1 голос
/ 25 июня 2011

Если вам не нужно сохранять информацию, вы можете использовать сеанс

session.myvariable

, если вам нужно сохранить и вы хотите ускорить процесс с помощью кеша, тогда вы можете кешировать select:

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