2013-09-03 1 views
0

Я использую зодб с вишневым. Я передаю данные в шаблон jinja2. Я хотел бы закрыть мое соединение zodb, прежде чем возвращать визуализацию шаблона.Стандартный способ отключения от базы данных в черри?

Я не могу, потому что шаблон нуждается в соединении при его рендеринге, поскольку данные являются данными зодб.

This ошибки из ...

zconn.close() #zconn.close closes the conn,db, and storage 
return template.render(args....) 

Как закрыть ZODB соед после я уже закончил возвращение? Есть ли функция «до запроса» и «после запроса», которую я могу определить, чтобы всегда иметь соединение db? В документации по вишневым видам не содержится много явных сведений о соединениях с базой данных, за исключением «делать это явно в начале открытой функции» и закрывать ее перед возвратом ».

Или это стандартная практика, чтобы сказать ...

page = template.render(args...) 
zconn.close() 
return page 

ответ

1

Это стандартная практика только закрыть соединение, когда запрос завершен, да.

Отложить близость к последнему возможному моменту. Использование может использовать менеджер контекста для обработки закрытия для вас:

from contextlib import contextmanager 

@contextmanager 
def zodbconn(db): 
    conn = db.open() 
    yield conn.root() 
    conn.close() 

затем использовать:

with zodbconn(db) as zconn: 
    return template.render(args....) 

и соединение будет закрыто автоматически после было обрабатываетсом return заявления.

+0

@MKaras: обязательно, но тогда вам нужно сначала открыть соединение, а затем использовать 'с закрытием (zconn):' в качестве менеджера контекста в каждом методе. –

Смежные вопросы