SQLAlchemy ORM异常:FlushError-实例具有空的标识键。

3

我计划使用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个回答

4
您的__init__方法不完整:为了将参数分配给成员变量,您实际上应该assign它们:
def __init__(...):
    self.schedule_id = schedule_id
    ...

在调用flush之前,您可以先调用print(newSchedule),这样您就会发现所有字段都是空的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接