SQLAlchemy:是否可以存储会话范围的属性

时间:2013-11-08 17:09:58

标签: python session sqlalchemy

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

日志表如下所示:

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

要编写这样的日志,我在表Log中有一个函数define,它使用以下原型插入一个新日志。

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查询。

1 个答案:

答案 0 :(得分:0)

据我所知,您不能将会话用作全局命名空间,无论如何它看起来都不是一个好主意。如果您确实需要这样做,那么应该由您的应用程序使用您拥有的任何其他全局或会话状态来完成,而不是通过将SQLAlchemy与您的身份验证/用户会话进程相结合。