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
在这种情况下,ZCAgetUtility
是用于查找数据库连接的特定于应用程序的API,其中会话绑定到线程。使用会话的class方法
类:
def foo(self, bar):
session = Session.object_session(self)
#....