【发布时间】:2019-01-10 13:08:36
【问题描述】:
我有两张桌子:
class Project(DataBase):
__tablename__ = 'projects'
id = Column(Integer, primary_key=True, autoincrement=True, nullable=False)
name = Column(String, nullable=False, unique=True)
domain = Column(String, nullable=False)
phrases = relationship("Phrase", backref='proj')
def __init__(self, name, domain):
self.name = name
self.domain = domain
class Phrase(DataBase):
__tablename__ = 'phrases'
query_id = Column(Integer, primary_key=True, autoincrement=True, nullable=False)
query_text = Column(String, nullable=False)
project = Column(Integer, ForeignKey('projects.id'), nullable=False)
enable = Column(Boolean, nullable=False, default=True)
def __init__(self, query_text, project, city):
self.query_text = query_text
self.project = project
我有一个函数:
def get_first_query():
session = Session(bind=engine)
q = session.query(Phrase).filter(Phrase.enable == True).first()
session.close()
return q
我想从表 2 中获取一个对象,而不是从第一个表中获取其父对象:
session = Session(bind=engine)
q = get_first_query()
print(q.proj)
它不起作用并打印此错误:
sqlalchemy.orm.exc.DetachedInstanceError:父实例未绑定到会话;懒加载操作 属性“proj”无法继续
我可以这样做:
session = Session(bind=engine)
q = get_first_query()
q_project = session.query(Project).filter(Project.id == q.project)
但这是一个糟糕的方法。
【问题讨论】:
-
SO 的官方语言是英语。有一个Russian-language version of SO。
-
对不起,我试着用英文重新输入
标签: python sqlite flask orm sqlalchemy