我有以下SQLAlchemy模型:
class MyObject2(db.Model, Timestamp):
id = db.Column(UUIDType(binary=False), nullable=False, primary_key=True)
myobj1_id = db.Column(UUIDType(binary=False), db.ForeignKey(MyObject1.id), nullable=False)
name = db.Column(db.String(25))
def __init__(self, myobj1_id, name=None):
self.id = uuid.uuid4()
self.myobj1_id = myobj1_id
self.name = name
@classmethod
def create(cls, myobj1, name=None):
try:
myobj2 = cls(myobj1_id=myobj1.id, name=name)
db.session.add(myobj2)
db.session.commit()
print myobj2 #<=========== LOOK AT THIS LINE!
return myobj2
except Exception:
db.session.rollback()
raise
finally:
db.session.close()
请注意,那里有一个无关的打印声明。 看到?它没有真正做任何事情。哦,好吧。
现在,这是调用create()
方法来创建模型实例的代码:
myobj2 = MyObject2.create(myobj1=myobj1, name='Hello')
serialized_myobj_2 = MyObject2Serializer(myobj2).data
这一切都很好。但是一旦我删除了不必要的print语句,我就会在调用者的最后一行收到以下错误:
Instance <MyObject2 at 0x7ff804ac5710> is not bound to a Session; attribute refresh operation cannot proceed
为什么呢?如何缺少print语句会导致此错误?
当我搜索此错误时,我找到了this post。但是那里给出的解决方案 - 调用session.expunge_all() right before
session.close()` - 对我来说不起作用。
在不破坏我的代码的情况下摆脱那个print语句的解决方案是什么?