Mam klasy tabeli SQLAlchemy utworzony za pomocą deklaratywnej metody:Jak automatycznie dodać obiekt SQLAlchemy do sesji?
mysqlengine = create_engine(dsn)
session = scoped_session(sessionmaker(bind=mysqlengine))
Base = declarative_base()
Base.metadata.bind = mysqlengine
class MyTable(Base):
__table_args__ = {'autoload' : True}
Teraz, przy użyciu tej tabeli w kodzie Chciałbym nie trzeba używać session.add metodę, aby dodać każdy nowy rekord do aktywnej sesji więc zamiast:
row = MyTable(1, 2, 3)
session.add(row)
session.commit()
chciałbym posiadać:
row = MyTable(1, 2, 3)
session.commit()
Wiem, że to pytanie już: Possible to add an object to SQLAlchemy session without explicit session.add()?
I zdaję sobie sprawę, można wymusić to zachowanie, wykonując następujące czynności:
class MyTable(Base):
def __init__(self, *args, **kw):
super(MyTable, self).__init__(*args, **kw)
session.add(self)
Ja jednak nie chcę uwędzić mój kod zawierający 30 tabele Ta metoda. Wiem też, że Elixir (http://elixir.ematia.de/trac/wiki) robi to, więc musi być możliwe w pewnym sensie.
Wystarczy mieć świadomość, że jeśli używasz walidacji sqlalchemy lub zdarzenia pre-flush, trzeba także wykreślić z sesji do obiektu, który nie powiedzie walidacji. Po prostu przyszło mi to do głowy przy korzystaniu z tego rozwiązania. –