sql >> Databáze >  >> RDS >> Mysql

Jak zavřít připojení sqlalchemy v MySQL

Zde je návod, jak správně napsat tento kód:

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()

Tedy Engine je továrna pro připojení a také pool spojení, nikoli spojení samotné. Když řeknete conn.close() , připojení se vrátí do fondu připojení v rámci modulu , ve skutečnosti není uzavřen.

Pokud chcete, aby bylo připojení skutečně uzavřeno, to znamená, že nebylo sdruženo, zakažte sdružování pomocí NullPool :

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

S výše uvedeným Engine konfigurace, každé volání conn.close() zavře základní připojení DBAPI.

Pokud se OTOH skutečně chcete připojit k jinému databáze při každém volání, tedy vaše pevně zakódované "localhost/test_database" je jen příklad a ve skutečnosti máte spoustu různých databází, pak přístup pomocí dispose() je v pořádku; uzavře každé připojení, které není odhlášeno z fondu.

Ve všech výše uvedených případech je důležité, že Connection objekt je uzavřen pomocí close() . Pokud používáte jakýkoli druh spouštění „bez připojení“, je to engine.execute() nebo statement.execute() , ResultProxy objekt vrácený z tohoto volání spuštění by měl být plně přečten nebo jinak explicitně uzavřen pomocí close() . Connection nebo ResultProxy který je stále otevřený, zakáže NullPool nebo dispose() přístupy od uzavření každého posledního spojení.



  1. Jak získat všechny chyby všech balíčků SSIS v řešení

  2. My 11g Optimizer Stats Job Quit On Me – Opraveno

  3. Výjimka:K tomuto připojení je již přidružen otevřený DataReader, který je třeba nejprve zavřít

  4. Jak zajistit, aby databáze neměly fragmentované indexy