When to use SQLAlchemy listen events

Loris Bennett loris.bennett at fu-berlin.de
Fri Feb 25 05:32:02 EST 2022


Hi,

I am wondering whether SQLAlchemy listen events are appropriate for the
following situation:

I have a table containing users and a table for events related to users

  class User(Base):
      __tablename__ = "users"

      uid = Column('uid', String(64), primary_key=True)
      gid = Column('gid', String(64), ForeignKey('groups.gid'), nullable=False)
      lang = Column('lang', String(2))


  class UserEvent(Base):
      __tablename__ = "user_events"

      id = Column('id', Integer, primary_key=True)
      date = Column('date', Date, nullable=False)
      uid = Column('gid', String(64), ForeignKey('users.uid'), nullable=False)
      comment = Column('comment', String(256))

(There are also analogous tables for groups and group events).

The functions provided by the interface are things like the following

  add_user(user, group, lang)
  move_user(user, group)
  delete_user(user)
  warn_user(user, reason)

Whereas 'add/move/delete_user' result in changes to the table 'users',
'warn_user' does not.  All should produce entries in the table
'user_events'. 

There could be more functions similar to 'warn_user' that only create an
entry in 'user_events'.  Potentially there could be a lot more of
these than the 'user'-table-changing type.

It seems like for the first three functions, capturing the resulting
database changes in the table 'user_events' would be a standard use-case
for listen event.  However, the 'warn_user' function is different.

So can/should I shoehorn the 'warn_user' function to being like the
others three and use listen events, or should I just come up with my own
mechanism which will allow any function just to add an entry to the
events table?

Cheers,

Loris

-- 
This signature is currently under construction.


More information about the Python-list mailing list