为什么sqlalchemy删除不起作用?

时间:2017-06-09 18:56:38

标签: python mysql sqlalchemy

这是我的代码:

class Room(Base):
    __tablename__ = 'room'

    _id = Column('id', Integer, primary_key=True, autoincrement=True)


def create_room(self):
    try:
        session = Session()
        new_room = Room()
        session.add(new_room)
        session.expunge(new_room)
        session.commit()
        session.close()
        return new_room
    except exc.IntegrityError as e:
        logger.error('create room error')
        logger.error(e)
        return None

我使用expunge从会话中分离对象,然后打印房间ID:

room = room.create_room()
logger.info('room %d created' % room._id)

但系统说:

logger.info('room %d created' % room._id)
exceptions.TypeError: %d format: a number is required, not NoneType

为什么会这样?

1 个答案:

答案 0 :(得分:0)

您需要先提交或至少flush会话,稍后再删除。

我想房间ID是由数据库生成的。如果在提交之前删除了一个对象,它就永远不会被插入,并且永远不会生成并返回该ID,因此它仍为None