Python数据库会话(meta.Session)

0 投票
1 回答
784 浏览
提问于 2025-04-17 06:36

我有很多代码在编辑一个数据库,但我想做的是把所有需要编辑或添加的数据加载到一个会话中,然后返回一个网页,让用户查看这些数据,最后再提交到数据库。大概是这样的:

def index(self):
    empsTbl = meta.Session.query(model.Person).all();
    newEmp = model.Person()
    newEmp.userid = row[0].strip()
    meta.Session.add(newEmp)
    return render("/update.html")

def commitSession(self):
    meta.Session.commit()

如果我试着按网页上的一个按钮来调用commitSession这个函数,结果会话似乎是空的。我尝试过在模型上做一些修改,比如:

Session.configure(autoflush=False, autocommit = False, bind=engine)

我也改过基础控制器。我把以下代码去掉了:

meta.Session.remove()

这样就不会在每次调用后清空会话了。

我还尝试使用merge,看看能否把会话存储到持久化的数据库会话中:

meta.Session.merge(newEmp)

但我还是无法让它正常工作。

补充:

如果有人能给我一些关于如何保存Python会话的建议,那就太好了。

1 个回答

1

我希望不是这样,但看起来你还没有理解你的网页应用程序的生命周期。对于你来说,有两个生命周期,因为你有两个操作,也就是两个请求和响应的场景。你需要明白的是,通常你在一个操作中做的所有事情,都是局限在那个操作里的。

比如说,你的“index”操作的数据库会话和“commitSession”操作的数据库会话是不同的。因此,“commitSession”中的会话是空的。为什么呢?因为你刚刚创建了一个新的会话。

你需要做的是找到一种有效的方法,把“index”操作中的信息传递到“commitSession”操作。通常使用的方法是将信息序列化,放入你的网页会话中,然后在“commitSession”操作中反序列化这些信息,写入数据库,并清空网页会话中的信息。

或者,你也可以把“index”中的所有信息放在一些隐藏字段里,然后再次提交给“commitSession”。

撰写回答