0

我正在开发一个使用 SQLALchemy 操作 SQL 表的软件。用户将执行的每个操作(插入、修改、删除)都必须记录在特定的 LOG 表上。

日志表如下所示:

    +-----------+----------------------------------------------+
    |  user_id  |  log                                         |
    +-----------+----------------------------------------------+
    |       21  |  Value x added in table y                    |
    |       12  |  Value z deleted from table w                |

为了编写这样的日志,我在表 Log 中定义了一个函数,该函数使用以下原型插入一个新日志。

class Foo(Base):
    __tablename__ = 'foo'
    id = Column(Integer, primary_key=True)
    value = Column(String)

        @staticmethod
    def insert(value):
        item = Foo()
        item.value = value
        session.add(item)
        Log.add(item)


class Log(Base):
    user_id = Column(Integer, not_null=True)
    value = Column(String, not_null=True)

    @saticmethod
    def add(item):
        logitem = Log()
        logitem.user_id = x
        logitem.value = "Insertion of %s" % item.value
        session.add(logitem)

上面的代码不起作用,因为未定义用户的“x”。

当我调用 Foo.insert 方法时,我不想将 user_id 作为参数传递。我想知道是否可以将 user_id 绑定到会话,以便 user_id 定义一次并为所有 sql 查询保留。

4

1 回答 1

0

据我所知,您不能将会话用作全局名称空间,而且它看起来也不是一个好主意。如果您真的需要这样做,它应该由您的应用程序使用您拥有的任何其他全局或会话状态来完成,而不是通过将 SQLAlchemy 耦合到您的身份验证/用户会话过程。

于 2013-11-08T23:43:52.737 回答