插入不适用于SQLAlchemy数据库会话
为什么不插入记录?返回一个id,但是当我检查数据库时没有新记录。
来自 models.py
from zope.sqlalchemy import ZopeTransactionExtension
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
还有 views.py
DBSession.execute(text('INSERT INTO (a,b,c) VALUES (\'a\',\'b\',\'c\') RETURNING id'), params=dict(a=a,b=b,c=c))
我试过提交transaction.commit()
,但不会出现错误,但不会插入记录。result.fetchone()[0]
正在获取ID。
而DBSession.commit
得到
assert self.transaction_manager.get().status == ZopeStatus.COMMITTING, "Transaction must be committed using the transaction manager"
-
这是因为您没有使用ORM在事务不知道它应该自己提交之前插入ORM,因为事务状态没有被标记为脏。
DBSession.execute
在查询后,将以下代码放置在views.py中。from zope.sqlalchemy import mark_changed session = DBSession() session.execute(...your query...) mark_changed(session)
此时,事务应该能够正确提交查询,或者使用ORM插入新行。
以下是有关此主题的更多信息:
https://pypi.python.org/pypi/zope.sqlalchemy/0.7.4#id15
默认情况下,zope.sqlalchemy在首次使用会话时将其置于“活动”状态。ORM写入操作会自动将会话移至“已更改”状态。这样可以避免不必要的数据库提交。有时有必要直接通过SQL与数据库进行交互。无法猜测这样的操作是读还是写。因此,当手动SQL语句写入数据库时,我们必须手动将会话标记为已更改。
-
适用于大型数据库的数据库?
2021-04-20 关注 0 浏览120 1答案
-
错误:此功能不适用于您正在使用的数据库
2021-06-04 关注 0 浏览54 1答案
-
SQLite插入查询不适用于python?
2021-01-29 关注 0 浏览68 1答案
-
大猩猩会话不适用于客户的CORS
2021-02-01 关注 0 浏览81 1答案
-
全部插入并插入,nextval不适用于重复值
2021-07-06 关注 0 浏览113 1答案
-
MySQL插入查询不适用于WHERE子句
2021-05-10 关注 0 浏览79 1答案
-
SQL插入语句不适用于Javascript
2021-05-10 关注 0 浏览61 1答案
-
Azure Redis缓存的会话状态不适用于多个实例
2021-02-01 关注 0 浏览163 1答案
-
不适用于实时会话业务的交换方式是( )。
2021-04-16 关注 0 浏览35 1答案
-
Flask-SQLAlchemy-会话如何与多个数据库一起使用?
2021-01-29 关注 0 浏览127 1答案