association_table = Table("association_table",
Base.metadata,
Column("show_id", Integer(), ForeignKey("show_times.id"), primary_key=True),
Column("theater_id", Integer(), ForeignKey("theaters.id")))
association_table2 = Table("association_table2",
Base.metadata,
Column("show_id", Integer(), ForeignKey("show_times.id"), primary_key=True),
Column("movie_id", Integer(), ForeignKey("movies.id")))
class Movie(Base):
__tablename__ = "movies"
id = Column(Integer, primary_key=True)
title = Column(String(), unique=True)
plot = Column(String())
duration = Column(String())
rating = Column(String())
trailer = Column(String())
imdb = Column(String())
poster = Column(String())
summary = Column(String())
class Theater(Base):
__tablename__ = "theaters"
id = Column(Integer, primary_key=True)
zip_code = Column(String())
city = Column(String())
state = Column(String())
address = Column(String())
phone_number = Column(String())
class Showtime(Base):
__tablename__ = "show_times"
id = Column(Integer, primary_key=True)
date = Column(Date())
theaterz = relationship("Theater", secondary=association_table)
moviez = relationship("Movie", secondary=association_table2)
showtimes = Column(String())
предположив у нас есть объекты кино:экономии Объемные сложные объекты SQLAlchemy
movie_1 = Movie(title="Cap Murica",
plot="Cap punches his way to freedom",
duration="2 hours")
movie_2 = Movie(title="Cap Murica 22222",
plot="Cap punches his way to freedom again",
duration="2 hours")
и театральный объект:
theater = Theater(name="Regal Cinemas",
zip_code="00000",
city="Houston",
state="TX")
как мы Bulk сохранить это в show_times
модели?
Я попытался сделать это:
movies = [movie_1, movie_2] # these movie objects are from the code snippet above
show_times = Showtime(date="5/19/2016",
theaterz=[theater],
moviez=movies)
session.add(show_times)
session.commit()
ура вышеуказанных работ. но когда я сделать это навалом, как это:
showtime_lists = [show_time1, show_time2, showtime3] # these are basically just the same show time objects as above
session.bulk_save_objects(showtime_lists)
session.commit()
он не подведет, но данные также не получает сохраняется в базе данных.
Я имею в виду, есть ли альтернатива добавлению каждого show_time
к сеансу индивидуально? Объемная вставка будет лучше, но я не понимаю, почему данные не сохраняются, если это делается.
Не удается полностью сохранить его, или сами экземпляры ShowTime сами сохраняются, но не имеют соответствующих данных. По-видимому, ['bulk_save_objects'] (http://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.bulk_save_objects) является довольно низким API уровня и игнорирует много вещей, как отношения. Вы посмотрели ['Session.add_all'] (http://docs.sqlalchemy.org/en/latest/orm/session_api.html#sqlalchemy.orm.session.Session.add_all)? –
@ IljaEverilä Думаю, я не упоминал об этом. но да 'Showtime' сохраняется, но« отношения »игнорируются. – halcyonjuly7