У меня есть объект Job, который я создаю в начале вызова API:
class Job(Base):
__tablename__ = 'jobs'
id = Column(BIGINT, primary_key=True)
end_date = Column('end_date', DateTime(timezone=True), nullable=False)
start_date = Column('start_date', DateTime(timezone=True), default=datetime.datetime.utcnow(), nullable=False)
name = Column('name', TEXT, nullable=False)
def __init__(self, name):
self.name = name
self.start_date = datetime.datetime.utcnow()
self.end_date = 'infinity'
Когда вызывается API, я создаю новую работу:
job=Job(name="job1")
session.add(job)
session.commit()
session.close()
Однако после запуска задания я хочу отправить этот объект задания в качестве параметра некоторым другим потокам, чтобы узнать, какое задание отвечало за этот поток.
Проблема в том, что после закрытия сеанса я не могу использоватьПри работе с объектом Python я получу следующую ошибку:
sqlalchemy.orm.exc.DetachedInstanceError: Instance <Job at 0x3c67f30> is not bound to a Session; attribute refresh operation cannot proceed (Background on this error at: http://sqlalche.me/e/bhk3)
Я хочу сохранить объект работы до его запуска. В любом случае, я могу использовать его вне области сеанса, но после того, как я его сохранил? Я знаю, что могу запросить его позже, но я не хочу, я хочу работать с тем же объектом задания, который я создал ..
Мое текущее решение:
session.add(job)
session.commit()
get_job_id_query = (
session.query
.find(Job.id).filter(Job.end_date == 'infinity')
.filter(Job.name == job.name)
)
job_id = get_job_id_query.all()[0][0]
session.close()
, а затем япередать идентификатор следующим потокам ..