sqlalchemy.orm.exc.FlushError: Instance has a NULL identity key
sqlalchemy.orm.exc.FlushError: Instance has a NULL identity key
我打算使用来自 Python27 的 sqlalchemy 将数据提交给 mysql table。当我尝试 运行 这个文件时,它显示了这样的错误
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 table 上创建了一个新行,尽管所有列都是空的
这是我的 class
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()
谢谢
您的 __init__
方法不完整:为了将参数分配给成员变量,您实际上应该 assign
它们:
def __init__(...):
self.schedule_id = schedule_id
...
您可以在调用flush
之前调用,只需调用print(newSchedule)
,您会看到您的所有字段都是空的。
我打算使用来自 Python27 的 sqlalchemy 将数据提交给 mysql table。当我尝试 运行 这个文件时,它显示了这样的错误
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 table 上创建了一个新行,尽管所有列都是空的
这是我的 class
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()
谢谢
您的 __init__
方法不完整:为了将参数分配给成员变量,您实际上应该 assign
它们:
def __init__(...):
self.schedule_id = schedule_id
...
您可以在调用flush
之前调用,只需调用print(newSchedule)
,您会看到您的所有字段都是空的。