使用sqlalchemy删除数据时刷新错误

时间:2014-10-16 05:54:07

标签: python sqlalchemy

我有两个架构。

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'.

1 个答案:

答案 0 :(得分:1)

由于StopName的对象类型不匹配,问题出在那里。在这里,我将客户端的Stop对象转换为服务器的Stop对象(db.model)。但我错过了StopName对象的相同转换。因此,它试图从客户端表示创建StopName。所以,我明确地将它转换为服务器端的StopName。它解决了这个问题。 所以基本上,当sqlalchemy将其他类型的对象解释为ORM对象时,对象没有属性'_sa_instance_state'错误。