Использование engine
в качестве одноразового использования, вероятно, не идеально для вас.Если возможно, вы можете сделать движок членом класса и назвать его как self.engine
.
. Другой вариант - явная утилизация движка.
def write_data_frame(self, data_frame, table_name):
engine = create_engine(self.engine_string)
data_frame.to_sql(name=table_name, con=engine, if_exists='append', index=False)
engine.dispose()
Как отмечено в the docs ,
Это дает эффект полного закрытия всех текущих проверенных соединений с базой данных.Соединения, которые все еще проверены, не будут закрыты, однако они больше не будут связаны с этим Механизмом, поэтому, когда они закрываются по отдельности, в конечном итоге Пул, с которым они связаны, будет собирать мусор и полностью закрываться, еслиеще не закрыто при регистрации.
Это также может быть хорошим вариантом использования для блока try...except...finally
, поскольку .dispose
будет вызываться только тогда, когда предыдущий код выполняется без ошибок.
Я бы предпочел предложить вам передавать соединения следующим образом:
with engine.connect() as connection:
data_frame.to_sql(..., con=connection)
Но документы to_sql
указывают, что вы не можете этого сделать, и они примут только engine