我有两个架构。
class Stop(Base):
'''
Class Model for Stops
'''
__tablename__ = 'STOPS'
uid = Column('uid', Integer, primary_key=True, autoincrement=False)
category_code = Column('category_code', String(60), nullable=False)
和
class StopName(Base):
'''
Class Model for StopNames
'''
__tablename__ = 'STOP_NAME'
uid = Column('uid', Integer, ForeignKey("STOPS.uid"), primary_key=True)
name = Column('name', String(60), primary_key = True,nullable=False)
lang_code = Column('lang_code', String(4), nullable=False)
stop = relationship("Stop", backref = 'name')
当我尝试使用以下两个表中的代码删除数据时,我收到以下错误,
session.query(StopName).delete()
session.query(Stop).delete()
New instance <Stop at 0xf593d50> with identity key (<class 'harmonize_station_id.core.model.Stop'>, (400000000,)) conflicts with persistent instance <Stop at 0x3bdd850>
我也尝试过使用cascade,后面跟着
stop = relationship("Stop", backref = 'name',cascade="delete")
我收到以下错误。
AttributeError: 'StopName' object has no attribute '_sa_instance_state'.
答案 0 :(得分:1)
由于StopName的对象类型不匹配,问题出在那里。在这里,我将客户端的Stop对象转换为服务器的Stop对象(db.model)。但我错过了StopName对象的相同转换。因此,它试图从客户端表示创建StopName。所以,我明确地将它转换为服务器端的StopName。它解决了这个问题。 所以基本上,当sqlalchemy将其他类型的对象解释为ORM对象时,对象没有属性'_sa_instance_state'错误。