Başlığın da belirttiği gibi.Bir nesnenin mülkünde başka bir nesneyi nasıl sqlalchemy içinde işlemek?
İşte kodlar.
from sqlalchemy import Column, ForeignKey, Integer, String, DateTime, func, Boolean
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import scoped_session
from sqlalchemy import create_engine
import sqlalchemy.exc
from sqlalchemy import event
from settings import DB_HOST
def return_a_scoped_session():
engine = create_engine(DB_HOST)
session_factory = sessionmaker(bind=engine)
db_session = scoped_session(session_factory)
return db_session()
Base = declarative_base()
class MyClass(Base):
"""Doc string for MyClass"""
__tablename__ = 'my_table'
file_name = Column(String(512), nullable=True)
class Aria2Jobs(Base):
__tablename__ = 'nh_downloading_jobs'
id = Column(Integer, primary_key = True)
file_name = Column(String(512), nullable=True)
is_verified = Column(Boolean, default=False, nullable=True)
def check_if_verified(self):
if self.is_verified:
# create an instance
a_job= MyClass(file_name=self.file_name)
_session = return_a_scoped_session()
_session.add(a_job)
_session.commit()
_session.close()
# event
@event.listens_for(Aria2Jobs.is_verified, 'set')
def send_to_jsonpyes_jobs(target, value, oldvalue, initiator):
target.check_if_verified()
# error is when I set a property of an object (this property will trigger an event 'set' and the event will try to commit a session.
session = return_a_scoped_session()
row = session.query(Aria2Jobs).first()
row.is_verified = True
session.add(row)
# the error came out
#
# sqlalchemy.exc.invalidrequesterror object is already attached to session
session.commit()
# How to commit another object in a property of an object?
Bir nesnenin mülkünde başka bir nesneyi nasıl sqlalchemy içinde işlemek? Ben session.add(row)
çalıştı
Gördüğünüz gibi,
hatası:
sqlalchemy.exc.invalidrequesterror object is already attached to session
Ben row
bağlı olan oturumun bilmiyorum. Ben fonksiyonu check_if_verified
çalıştırmak istediğiniz - En son hatası -
sqlalchemy.exc.InvalidRequestError: Object '<Aria2Jobs at 0x7fad3a635050>' is already attached to session '1' (this is
SQLAlchemy [ http://docs.sqlalchemy.org/en/latest/orm/session_basics.html#when-do-i-construct-a-session-when-do-i-commit-it-and-when 'e karşı açıkça önerir. -do-i-close-it) model sınıflarının oturumları gerçekleştirmesine izin verir. "Bu özel şeyi nasıl yapabilirim" diye sormak yerine, çözmeye çalıştığınız asıl sorunu bize bildirmeniz daha yararlı olabilir. – inklesspen
Teşekkür ederim. SQLAlchemy kullanarak programlama yolunu değiştiriyorum. Ve bir çekicilik gibi çalışır. – dotslash