Как автоматически добавить объект SQLAlchemy в сеанс?

У меня есть класс таблицы SQLAlchemy, созданный с помощью декларативного метода:

mysqlengine = create_engine(dsn)
session = scoped_session(sessionmaker(bind=mysqlengine))
Base = declarative_base()
Base.metadata.bind = mysqlengine

class MyTable(Base):
  __table_args__ = {'autoload' : True}

Теперь, при использовании этой таблицы в коде, я бы не хотел использовать session.addдля добавления каждой новой записи в активный сеанс, поэтому вместо:

row = MyTable(1, 2, 3)
session.add(row)
session.commit()

Я хотел бы иметь:

row = MyTable(1, 2, 3)
session.commit()

Теперь я уже знаю об этом вопросе: Можно добавить объект в сеанс SQLAlchemy без явного session.add()?

И я понимаю, что вы можете вызвать такое поведение, выполнив следующие действия:

class MyTable(Base):
  def __init__(self, *args, **kw):
    super(MyTable, self).__init__(*args, **kw)
    session.add(self)

Однако я не хочу раздувать мой код, содержащий 30 таблиц, с помощью этого метода. Я также знаю, что Elixir (http://elixir.ematia.de/trac/wiki) делает это, так что в каком-то смысле это должно быть возможно.

5
задан Community 23 May 2017 в 10:29
поделиться