Python 如何在SQLAlchemy声明类中使用引擎?

Python 如何在SQLAlchemy声明类中使用引擎?,python,orm,sqlalchemy,Python,Orm,Sqlalchemy,假设我在User.py模块中有这个User。我将使用此用户作为更大应用程序的一部分。我将在主应用程序模块中配置引擎(数据库连接)。但是 如果User.foo需要使用引擎或会话怎么办?例如,我在数据库中有一个函数,它接受一个用户id,我想在foo中调用该函数。为此,我需要使用引擎。执行或会话。执行;但是引擎或会话尚未创建 from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, In

假设我在
User.py
模块中有这个
User
。我将使用此
用户
作为更大应用程序的一部分。我将在主应用程序模块中配置
引擎
(数据库连接)。但是

如果
User.foo
需要使用
引擎
会话
怎么办?例如,我在数据库中有一个函数,它接受一个用户id,我想在
foo
中调用该函数。为此,我需要使用
引擎。执行
会话。执行
;但是
引擎
会话
尚未创建

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)
来自sqlalchemy.ext.declarative import declarative\u base
从sqlalchemy导入列,整数,字符串
Base=声明性_Base()
类用户(基本):
__tablename_uu='users'
id=列(整数,主键=True)
名称=列(字符串)
fullname=列(字符串)
密码=列(字符串)
定义初始化(self、name、fullname、password):
self.name=名称
self.fullname=fullname
self.password=密码
def foo(自我,酒吧):
“我需要一个引擎或会话!”
通过。。。。
定义报告(自我):
返回“”%(self.name、self.fullname、self.password)

您需要创建一个应用程序级API,以便在有人调用该方法时检索数据库

例如,当使用
collective.lead
将SQLAlchemy与Zope集成时,数据库作为实用程序在Zope组件体系结构中注册,因此每当我需要会话时,我都使用getUtility查找:

db = getUtility(IDatabase, name=u'responsecentre')
session = db.session                        
在这种情况下,ZCA
getUtility
是用于查找数据库连接的特定于应用程序的API,其中会话绑定到线程。

使用
会话的class方法
类:

def foo(self, bar):
    session = Session.object_session(self)
    #....