0

モジュールにこれUserがあるとしましょう。これをより大きなアプリケーションの一部としてuser.py使用します。メイン アプリケーション モジュールで (データベース接続)Userを構成します。Engineしかし...

User.fooまたはを使用する必要がある場合はどうなりますEngineSession? たとえば、データベースにユーザー ID を受け取る関数があり、その関数を内部で呼び出したいとしますfoo。そのためには、Engine.executeorを使用する必要がありSession.executeます。EngineorSessionはまだ作成されていません。

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
Base = declarative_base()
class User(Base):
    __tablename__ = 'users'

    id = Column(Integer, primary_key=True)
    name = Column(String)
    fullname = Column(String)
    password = Column(String)

    def __init__(self, name, fullname, password):
        self.name = name
        self.fullname = fullname
        self.password = password

    def foo(self, bar):
        """I need an Engine or Session!"""
        pass #....

    def __repr__(self):
       return "<User('%s','%s', '%s')>" % (self.name, self.fullname, self.password)
4

2 に答える 2

1

object_sessionクラスのクラス メソッドを使用しますSession

def foo(self, bar):
    session = Session.object_session(self)
    #....
于 2012-05-24T20:25:19.370 に答える
0

誰かがそのメソッドを呼び出すたびにデータベースを取得するには、アプリケーション レベルの API を作成する必要があります。

collective.leadたとえば、SQLAlchemy を Zope と統合するために使用する場合、データベースはユーティリティとして Zope コンポーネント アーキテクチャに登録されるため、セッションが必要なときはいつでも getUtility ルックアップを使用します。

db = getUtility(IDatabase, name=u'responsecentre')
session = db.session                        

この場合、ZCAgetUtilityは、セッションがスレッドにバインドされているデータベース接続を検索するアプリケーション固有の API です。

于 2012-05-24T17:20:28.270 に答える