Python数据库会话(meta.Session)

时间:2011-11-18 17:18:29

标签: python session sqlalchemy pylons

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

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会话的最佳方法的建议,那将是非常有用的

1 个答案:

答案 0 :(得分:1)

我希望不是这样,但似乎你还没有理解你的网络应用程序所处的生命周期。 在你的情况下,你有2个生命周期,因为你有2个动作。 2个请求/响应方案。你必须明白,(大部分)你在一个动作中所做的所有事情,它都留在那里。 您的数据库 - 操作“index”的会话是另一个“commitSession”中的会话,因此,“commitSession”中的该会话为空。为什么?因为您只提交了一个新创建的会话。

您需要做的是为您和您的事业找到一种工作方式,将信息从操作“index”传输到操作“commitSession”。最常用的方法是序列化信息,将其放入websession,在“commitSession”-action中反序列化,将其写入数据库并使websession中的信息无效。 或者您将所有信息从“索引”中删除到某些隐藏字段中,然后再次针对“commitSession”发布它们。