0

我正在使用 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.sessionsession_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') 构建的对象。PersonSchemadb.session

我的问题是:有没有办法在不改变定义的情况下person解除绑定db.session以便能够使用它?或者也许在调用时如何覆盖默认会话(我试过但没有用)?避免/解决这种情况的最佳方法是什么?session_2PersonSchema.load.load(person_data, session=session_2)

4

0 回答 0