2012-05-04 6 views
2

2つのトルネードインスタンスを開始します。 nornx upstreamを使用して、竜巻-8000および竜巻-8001。複数のトルネードインスタンス間でSqlalchemyクエリの一貫性がない

1つのインスタンスにデータを挿入すると、別のインスタンスのクエリでこのデータを見つけることができません。

topics = self.db.query(Topic).order_by(Topic.updated_at.desc()).limit(20) 

そして、私のSQLAlchemyのは、次のようinitedされています:

SQLAlchemyのクエリは、次の通りである

class Application(tornado.web.Application): 
def __init__(self): 
    # setup app 
    from urls import handlers,ui_modules 
    settings = dict(
     debug = options.debug, 
     static_path = os.path.join(root_dir, "static"), 
     xsrf_cookies = True, 
     cookie_secret = "nzjxcjasduuqwheazmu293nsadhaslzkci9023nsadnua9sdads/Vo=", 
     ui_modules = ui_modules, 
    ) 
    tornado.web.Application.__init__(self, handlers, **settings) 

    self.db = scoped_session(sessionmaker(bind=engine,autocommit=False,autoflush=False)) 

たBaseHandler:

class BaseHandler(web.RequestHandler): 
    @property 
    def db(self): 
     return self.application.db 

をマイ挿入:

topic = Topic() 
topic.title = u'abcdefg' 
self.db.add(topic) 
self.db.commit() 

どこがエラーですか?

+3

'Topic'を問い合わせる前に、他のインスタンスを' commit() 'または' rollback()しようとしてください。これがうまくいけば、コミットされたオブジェクトの '不可視化 'を引き起こすのはトランザクションの分離です。 – van

+0

@vanありがとう、それは私のせいです。私はtornado.web.RequestHandlerのon_finishメソッドをオーバーライドし、その中にsession.remove()を行う必要があります。セッションは削除されないので、セッションは分離されます。あなたの助言に感謝します。 – goofansu

+0

素晴らしいあなたの解答に答えを加え、それを受け入れてください。 – van

答えて

3

@vanに感謝します。 解決済み。私はtornado.web.RequestHandlerのon_finishメソッドをオーバーライドし、session.remove()を追加しました。

関連する問題