2011-11-18 45 views
0

我有很多代码正在编辑数据库,但我想要做的是加载所有需要编辑或添加到会话中的数据,返回一个网页,并且一次用户查看了数据,然后提交到数据库。事情是这样的:Python数据库会话(meta.Session)

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() 

因此它不会在每次调用后删除会话。

我一直在使用合并,看看是否会会话存储在数据库持续性会议也试过:

meta.Session.merge(newEmp) 

但我仍然不能似乎得到它的工作。

编辑:

如果有人可以给到腌制一个Python会话将是非常有益

+0

最好让您的交易限于非常特殊的操作,而不需要花费很多时间。请编辑您的问题以描述您的交易的逻辑和程序化范围,即您获得会话的时间与您提交的时间之间会发生什么? – wberry

回答

1

我希望它不是那么最好的办法提醒,但似乎你还没有了解你的网络应用程序的生命周期。 在你的情况下你有2个生命周期,因为你有2个动作。 2个请求/响应场景。你必须明白,(主要)你在一个行动中做的所有事情,它都停留在那里。 您的数据库会话的行为“索引”是另一个作为“commitSession”中的一个,因此,“commitSession”中的会话为空。为什么?因为你只是提交一个新创建的会话。

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

+0

这是我需要知道的。我认为我可能不得不腌制该会议,但我不确定是否有可能在整个交易过程中坚持现有会话。 – JackalopeZero