Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak zamknąć połączenie sqlalchemy w MySQL?

Oto jak poprawnie napisać ten kod:

db = create_engine('mysql://[email protected]/test_database')
for i in range(1,2000):
    conn = db.connect()
    #some simple data operations
    conn.close()
db.dispose()

Oznacza to, że Engine jest fabryką na połączenia oraz pulę połączeń, a nie samo połączenie. Kiedy mówisz conn.close() , połączenie jest zwracane do puli połączeń w silniku , a właściwie nie zamknięte.

Jeśli chcesz, aby połączenie było rzeczywiście zamknięte, to znaczy nie było buforowane, wyłącz buforowanie przez NullPool :

from sqlalchemy.pool import NullPool
db = create_engine('mysql://[email protected]/test_database', poolclass=NullPool)

Z powyższym Engine konfiguracja, każde wywołanie conn.close() zamknie podstawowe połączenie DBAPI.

Jeśli OTOH rzeczywiście chcesz połączyć się z innymi bazy danych przy każdym wywołaniu, czyli zakodowana na stałe "localhost/test_database" to tylko przykład, a tak naprawdę masz wiele różnych baz danych, to podejście wykorzystujące dispose() jest w porządku; zamknie każde połączenie, które nie zostało pobrane z puli.

We wszystkich powyższych przypadkach ważne jest, aby Connection obiekt jest zamykany przez close() . Jeśli używasz dowolnego rodzaju wykonywania „bezpołączeniowego”, czyli engine.execute() lub statement.execute() , ResultProxy obiekt zwrócony z tego wywołania wykonania powinien być w pełni odczytany lub w inny sposób jawnie zamknięty przez close() . Connection lub ResultProxy który jest nadal otwarty, zabroni NullPool lub dispose() zbliża się od zamknięcia każdego ostatniego połączenia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wiele instrukcji select w pojedynczym zapytaniu

  2. Optymalne ustawienia MySQL dla zapytań dostarczających duże ilości danych?

  3. Jak wyłączyć sprawdzanie klucza obcego w MySQL?

  4. Zapytanie MySQL, aby uzyskać najlepiej sprzedające się produkty

  5. Nieprawidłowa wartość ciągu:'\xF0\x9F\x8E\xB6\xF0\x9F...' MySQL