这是我的代码:
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
为什么会这样?
答案 0 :(得分:0)
您需要先提交或至少flush会话,稍后再删除。
我想房间ID是由数据库生成的。如果在提交之前删除了一个对象,它就永远不会被插入,并且永远不会生成并返回该ID,因此它仍为None
。