Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用胡夫炼金术插入金字塔_Python_Pyramid - Fatal编程技术网

Python 如何使用胡夫炼金术插入金字塔

Python 如何使用胡夫炼金术插入金字塔,python,pyramid,Python,Pyramid,我正在努力学习python,我选择了金字塔框架。然而,我不想使用sqlalchemy提供的ORM,而是编写纯sql(尽管我仍然在使用sqlalchemy)。我也在使用胡夫炼金术来建立它 但是,我无法向数据库中插入。事务正在启动,但从未提交。 我的代码: db = dbsession(request) db.execute('insert into users (email, password) values (:email, :password)' , {'email':email, '

我正在努力学习python,我选择了金字塔框架。然而,我不想使用sqlalchemy提供的ORM,而是编写纯sql(尽管我仍然在使用sqlalchemy)。我也在使用胡夫炼金术来建立它

但是,我无法向数据库中插入。事务正在启动,但从未提交。
我的代码:

db = dbsession(request) db.execute('insert into users (email, password) values (:email, :password)' , {'email':email, 'password':password}) db=dbsession(请求) execute('insert-into-users(email,password)值(:email,:password),{'email':email,'password':password}) 有办法自动提交吗?文档非常稀少。


这就是你要找的。查看有关自动提交的更多文档。

khufu遵循使用事务管理器处理数据库连接的金字塔实践。这意味着在sessionmaker初始化中有一段代码(
ZopeTransactionExtension
)钩住数据库会话并跟踪更改。当检测到更改时,如果没有错误发生,则会在请求结束时自动提交更改。如果您绕过ORM并调用execute yourself,您可以1)关闭事务管理器并调用commit yourself,或者2)在执行
execute
后将会话标记为dirty,这样连接将认为内容已更改,并为您自动调用commit。第二种方法是首选的,因为如果您自己过早地调用commit,那么代码的其余部分可能会失败,但数据仍然会保留在数据库中。要执行第二种方法,请使用扩展插件中的
mark_changed
功能

from zope.sqlalchemy import mark_changed
session = DBSession()
mark_changed(session)
作为补充说明,如果您确实希望在请求结束之前强制提交事务,则可以通过

import transaction
transaction.commit()

但是,如果没有错误发生,这将在请求结束时自动发生。

如果使用事务扩展,这将不起作用。它将导致异常,因为事务管理器正在为您处理提交。
import transaction
transaction.commit()