我正在使用 marshmallow_sqlalchemy 库从模式中的对象构建对象,然后添加数据库。我的 Marshmallow 和 Sqlalchemy 类定义如下:
from marshmallow_sqlalchemy import ModelSchema
from marshmallow import fields
class Person(db.Model):
id = db.Column(db.Integer, autoincrement=True, primary_key=True, unique=True)
first_name = db.Column(db.Text)
last_name = db.Column(db.Text)
address = db.Column(db.Text)
class PersonSchema(ModelSchema):
first_name = fields.String(allow_none=False)
last_name = fields.String(allow_none=False)
address = fields.String(allow_none=True)
class Meta:
model = Person
sqla_session = db.session
fields = ('id', 'first_name', 'last_name', 'address')
我有两个会话;db.session
和session_2
。默认情况下,通过创建的对象PersonSchema
附加到db.session
。但我需要使用session_2
将这些对象添加到数据库中:
person_data = {'first_name': 'Bruno', 'last_name': 'Justin', 'Address': 'Street 34, DF'}
person = PersonSchema().load(person_data) # <Person (transient XXXXXXXXXXX)>
如果我使用db.session
将此对象添加到 db 它将正常工作:
db.session.add(person)
db.session.commit()
但是,当我想这样使用时session_2
:
session_2.add(person)
session_2.commit()
我收到一个错误:
这是预期的,因为默认情况下应该附加sqlalchemy.exc.InvalidRequestError: Object '<Person at 0x7ff9193e27d0>' is already attached to session '2' (this is '4')
构建的对象。PersonSchema
db.session
我的问题是:有没有办法在不改变定义的情况下person
解除绑定db.session
以便能够使用它?或者也许在调用时如何覆盖默认会话(我试过但没有用)?避免/解决这种情况的最佳方法是什么?session_2
PersonSchema
.load
.load(person_data, session=session_2)