Почему результаты запроса очистки Sqlalchemy, если запрос отсутствует в конструкторе?Python

Программы на Python
Гость
Почему результаты запроса очистки Sqlalchemy, если запрос отсутствует в конструкторе?

Сообщение Гость »

Я создал класс Result, который принимает оператор sqlalchemy, сохраняет его, выполняет оператор и сохраняет результаты выполнения.
Если оператор выполняется непосредственно в __init__(), приведенный ниже сценарий дает ожидаемый результат:
1 Test JE 1
2 Test JE 2

Но если оператор выполняется в set_result(), сценарий ниже выводит «Нет результатов». При использовании pdb отображается _cleanup() вызывается после set_result():
--Call--
> /usr/lib/python3/dist-packages/sqlalchemy/orm/state.py(420)_cleanup()

Почему _cleanup() вызывается после set_result(), а не после __init__()?
сценарий
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, declarative_base
from sqlalchemy import Column, String, Integer, select

Base = declarative_base()

class JournalEntry(Base):
__tablename__ = 'JournalEntry'

pid = Column(Integer, primary_key=True)
desc = Column(String, nullable=False)

def __repr__(self):
return f"{self.pid} {self.desc}"

class db:
engine = create_engine('sqlite:///:memory:', echo=False)
Base.metadata.create_all(engine)
Session = sessionmaker(engine)

class Result:
"""Helper for printing query results."""
def __init__(self, stmt):
self.stmt = stmt
with db.Session() as session:
self.result = session.scalars(self.stmt).all()
#self.result = self.set_result()

def set_result(self):
with db.Session() as session:
self.result = session.scalars(self.stmt).all()
breakpoint()
# objects in self.result get cleaned

def __repr__(self):
try:
resultstr = ""
for obj in self.result:
resultstr += f"{obj}\n"
return resultstr
except TypeError:
return "No results."

if __name__ == '__main__':
je1 = JournalEntry(desc="Test JE 1")
je2 = JournalEntry(desc="Test JE 2")

with db.Session.begin() as session:
session.add_all([je1, je2])

gj = Result(select(JournalEntry))
print(gj)



Подробнее здесь: https://stackoverflow.com/questions/787 ... onstructor

Вернуться в «Python»