我有很多代码正在编辑数据库,但我想要做的是加载我需要编辑或添加到会话中的所有数据,返回一个网页,一旦用户查看了数据,然后提交到数据库。像这样:
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 def,则会话似乎为空。我在模型上尝试了一些东西,例如:
Session.configure(autoflush=False, autocommit = False, bind=engine)
我也改变了基本控制器。我删除了代码:
meta.Session.remove()
这样每次调用后都不会删除会话。
我也尝试使用 merge ,看看是否会将会话存储在持久数据库会话中:
meta.Session.merge(newEmp)
但我似乎仍然无法让它发挥作用。
修改
如果有人可以提供有关挑选Python会话的最佳方法的建议,那将是非常有用的
答案 0 :(得分:1)
我希望不是这样,但似乎你还没有理解你的网络应用程序所处的生命周期。 在你的情况下,你有2个生命周期,因为你有2个动作。 2个请求/响应方案。你必须明白,(大部分)你在一个动作中所做的所有事情,它都留在那里。 您的数据库 - 操作“index”的会话是另一个“commitSession”中的会话,因此,“commitSession”中的该会话为空。为什么?因为您只提交了一个新创建的会话。
您需要做的是为您和您的事业找到一种工作方式,将信息从操作“index”传输到操作“commitSession”。最常用的方法是序列化信息,将其放入websession,在“commitSession”-action中反序列化,将其写入数据库并使websession中的信息无效。 或者您将所有信息从“索引”中删除到某些隐藏字段中,然后再次针对“commitSession”发布它们。