Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 28, 2010 17:12:36

Bdfy1
От:
Зарегистрирован: 2009-11-03
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlalchemy и сессии

Есть такой скрипт:

#!/usr/bin/python

from sqlalchemy import *

#from sqlalchemy.orm import create_session

engine = create_engine('postgres://test:test@test.ru/test')

engine.echo = False

#db = create_session(bind=engine, autocommit=False, autoflush=False)

metadata = MetaData(engine)

Model = Table('model', metadata, autoload=True )

update = Model.update().where('id=116401')
update.execute(name='test8')

Он апдейтит запись в таблице соотв. Нужно сделать так чтобы можно было дальше делать что-либо в транзакции ( те изменения не сразу комитились а по rollback/commit ) вручную. По идее это нужно “завернуть” в session ?
Т е
db = create_session(bind=engine, autocommit=False, autoflush=False)
А вот как дальше “привязать” этот апдейт к сессии ?



Офлайн

#2 Янв. 28, 2010 17:35:04

bw
От:
Зарегистрирован: 2007-09-26
Сообщения: 938
Репутация: +  20  -
Профиль   Адрес электронной почты  

sqlalchemy и сессии

Session = create_session(bind = engine, autocommit = True, autoflush = False)

s = Session()
try:
# в твоем случае
s.execute(
model.update(model.c.id == 116401),
dict(name = 'test8'))

except:
s.rollback()
s.close()
raise

s.commit()
s.close()
autocommit лучше делать True.
Model лучше назвать model.
Уделяй больше времени оформлению кода.

p.s. “Пишите код, исходя из того, что программисты, которые будут сопровождать вашу программу, — склонные к насилию психопаты, знающие, где вы живёте.” – Анонимус

p.p.s. Вообще-то, в твоём случае сессия необязательна. Можно использовать просто соединения.

..bw



Отредактировано (Янв. 28, 2010 17:41:42)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version