我打算使用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()
谢谢
答案 0 :(得分:2)
您的__init__
方法不完整:为了将参数分配到成员变量中,您实际应该assign
:
def __init__(...):
self.schedule_id = schedule_id
...
您可以在致电flush
之前致电,只需致电print(newSchedule)
,您就会看到所有字段都为空。