Sha*_*kar 5 python sqlalchemy flask flask-sqlalchemy marshmallow
有没有办法避免在使用Marshmallow时将数据插入到会话中 - sqlalchemy
sqlalchemy棉花糖避免加载到会话中
参考:https://marshmallow-sqlalchemy.readthedocs.org/en/latest/
因为我们试图通过自己管理对象.如果需要,将添加到会话中,但是对于验证我需要使用load()
author = Author(name='Chuck Paluhniuk')
book = Book(title='Fight Club', author=author)
session.add(author)
session.add(book)
session.commit()
author_schema.dump(author).data
# {'books': [123], 'id': 321, 'name': 'Chuck Paluhniuk'}
author_schema.load(dump_data, session=session).data
# <Author(name='Chuck Paluhniuk')>
Run Code Online (Sandbox Code Playgroud)
为了避免这个问题,在我尝试加载后我可以调用DB Session.close()来忽略临时数据.但我还需要让会话将数据刷新到DB中.
请指教.谢谢你的帮助
kei*_*thb -1
对架构的调用load()不会自动将对象添加到会话中:
>>> from models import session
>>> from schema import author_schema
>>> a = {'id': 1, 'name': 'Chuck Paluhniuk'}
>>> obj = author_schema.load(a, session=session)
>>> session.new
IdentitySet([])
>>> session.add(obj.data)
>>> session.new
IdentitySet([<Author(name=u'Chuck Paluhniuk')>])
>>> session.commit()
>>> session.new
IdentitySet([])
>>> session.identity_map.items()
[((<class 'models.Author'>, (1,)), <Author(name=u'Chuck Paluhniuk')>)]
>>> session.dirty
IdentitySet([])
Run Code Online (Sandbox Code Playgroud)
该对象必须以另一种方式进入会话。也许您可以发布一些显示该问题的代码?
更新:我将 的输出添加session.dirty到我的示例代码中。正如你所看到的,它是空的。声称会load()更改会话,但事实并非如此。其他一些代码可以。您能提供一个显示您的场景的代码示例吗?
| 归档时间: |
|
| 查看次数: |
1076 次 |
| 最近记录: |