Python SQLAlchemy中的链指定列
我对SQLAlchemy有一个奇怪的问题,这个问题很少发生 我有两个映射类:Python SQLAlchemy中的链指定列,python,sqlalchemy,Python,Sqlalchemy,我对SQLAlchemy有一个奇怪的问题,这个问题很少发生 我有两个映射类: class cQuantum(Base): __tablename__ = 'mesQuantum' quanID = Column(UNIQUEIDENTIFIER, primary_key=True, autoincrement=False) quantityTransferred = Column(Float) quantityActual = Column(Float)
class cQuantum(Base):
__tablename__ = 'mesQuantum'
quanID = Column(UNIQUEIDENTIFIER, primary_key=True, autoincrement=False)
quantityTransferred = Column(Float)
quantityActual = Column(Float)
received = Column(DateTime)
class cTransfer(Base):
__tablename__ = 'mesTransfer'
transferID = Column(UNIQUEIDENTIFIER, primary_key=True, autoincrement=False)
quanID = Column(UNIQUEIDENTIFIER, ForeignKey('mesQuantum.quanID'))
quantityTransferred = Column(Float)
quantityActual = Column(Float)
finished = Column(DateTime)
quanObj = relationship('cQuantum', foreign_keys=[quanID], lazy='joined')
在我的应用程序中,我执行以下操作:
try:
session = saSession()
trans = session.query(cTransfer).filter(#some expression).first()
trans.finished = value
trans.quantityTransferred = trans.quantityActual = value2
trans.quanObj.quantityTransferred = trans.quanObj.quantityActual = value2
trans.quanObj.received = value
session.commit()
except Exception as e:
session.rollback()
finally:
session.close()
在99%的情况下,一切正常
但有时仅更新cQuantum和CtrTransfer中的QuantityTransfer列,其余列(quantityActual、finished和received)保持为无(数据库中为NULL,默认值)。
value和value2都不是无
尤其令我困惑的是,这种说法是如何可能的
obj.col = obj2.col2 = value
两个绑定到单个会话的对象在提交时在数据库中产生不同的结果
很抱歉问了这么长的问题。不知道如何用更少的话来解释它。:) 你不会碰巧有多个工人同时这么做吧?价值的来源是什么?您的会话配置是什么?不,没有多个工作进程。value和value2实际上也是SQLAlchemy对象的属性,该对象在前面代码段之前关闭的另一个会话中预先填充。我不能保证填充了“value”(datetime)(应该有,datetime存在于相应的数据库记录中),但“value2”(float)肯定是填充的,因为它被分配给QuantityTransfer列。丢失会话的模型对象可能具有尚未加载其值的属性iirc,虽然这并不能解释为什么另一个收到一个值,而另一个没有。如果你将赋值移动到单独的位置,会发生什么?这就是我要尝试的。我将首先将分离对象中的两个值存储在两个单独的变量中,然后将这些变量中的每一列赋值1赋值-1行,希望这样做。然而,奇怪的行为。。。