sqlalchemy.orm.exc.FlushError:实例具有NULL标识密钥

时间:2015-05-13 06:45:00

标签: python mysql sqlalchemy

我打算使用Python27中的sqlalchemy向mysql表提交数据。当我试图运行此文件时,它显示如下错误

sqlalchemy.orm.exc.FlushError: Instance <TravelScheduleDetailRepository at 0x7f0fc07c8950> has a NULL identity key.  If this is an auto-generated value, check that the database table allows generation of new primary key values, and that the mapped Column object is configured to expect these generated values.  Ensure also that this flush() is not occurring at an inappropriate time, such aswithin a load() event.

虽然所有列都为空

,但它成功地在mysql表上创建了一个新行

这是我的班级

class TravelScheduleDetailRepository(Base):
    __tablename__ = 'Schedule_Detail'
    schedule_id = Column(String(7), primary_key = True)
    transport_id = Column(String(5))
    transport_type = Column(String(80))
    transport_company_name = Column(String(80))
    departure_city_id = Column(String(3))
    departure_country_id = Column(String(3))
    destination_city_id = Column(String(3))
    destination_country_id = Column(String(3))
    departure_date = Column(DateTime)
    available_seat = Column(Integer, autoincrement=False)

    def __init__(self, schedule_id, transport_id, transport_type, transport_company_name, departure_city_id, departure_country_id, destination_city_id, destination_country_id, departure_date, available_seat):
            self.schedule_id
            self.transport_id
            self.transport_type
            self.transport_company_name
            self.departure_city_id
            self.departure_country_id
            self.destination_city_id
            self.destination_country_id
            self.departure_date
            self.available_seat

    def __repr__(self):
            return "<TravelScheduleDetailRepository(schedule_id='%s', transport_id='%s', transport_type='%s', transport_company_name='%s', departure_city_id='%s', departure_country_id='%s', destination_city_id='%s', destination_country_id = '%s', departure_date = '%d', available_seat='%i')>" % ( self.schedule_id, self.transport_id, self.transport_type, self.transport_company_name, self.departure_city_id, self.departure_country_id, self.destination_city_id, self.destination_country_id, self.departure_date, self.available_seat)

以下是我如何将其插入mysql

    Session = sessionmaker(bind=engine)
session = Session()
newSchedule = TravelScheduleDetailRepository(schedule_id='bbb', transport_id='33', transport_type='Hell', transport_company_name='Slick', departure_city_id='GGG', departure_country_id='FOO', destination_city_id='WWW', destination_country_id='FFF', departure_date='03-03-2011', available_seat=40)
session.add(newSchedule)
session.flush()
session.commit()

谢谢

1 个答案:

答案 0 :(得分:2)

您的__init__方法不完整:为了将参数分配到成员变量中,您实际应该assign

def __init__(...):
    self.schedule_id = schedule_id
    ...

您可以在致电flush之前致电,只需致电print(newSchedule),您就会看到所有字段都为空。