Reputation: 453
I inteded to submit data to mysql table using sqlalchemy from Python27. when I tried to run this file, it shows an error like this
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.
afther that it successfully made a new row on the mysql table although all the columns are null
here's my 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)
and here's how I insert it to 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()
Thank you
Upvotes: 4
Views: 11718
Reputation: 76952
Your __init__
method is incomplete: in order to assign parameters into member variables you should actually assign
them:
def __init__(...):
self.schedule_id = schedule_id
...
You can call before you call flush
, just call print(newSchedule)
and you will see that all your fields are empty.
Upvotes: 6