0

可以说我Useruser.py模块中有这个。我将把它User用作更大应用程序的一部分。我将Engine在主应用程序模块中配置(数据库连接)。但...

如果User.foo需要使用EngineorSession怎么办?例如,我在数据库中有一个函数,它需要一个用户 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 回答