sql >> Database >  >> RDS >> Mysql

Hoe de sqlalchemy-verbinding in MySQL te sluiten

Zo schrijft u die code correct:

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

Dat wil zeggen, de Engine is een fabriek voor verbindingen en een pool van verbindingen, niet de verbinding zelf. Als je conn.close() . zegt , wordt de verbinding teruggestuurd naar de verbindingspool binnen de Engine , niet echt gesloten.

Als u wilt dat de verbinding daadwerkelijk wordt gesloten, dat wil zeggen niet gepoold, schakelt u pooling uit via NullPool :

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

Met de bovenstaande Engine configuratie, elke aanroep naar conn.close() sluit de onderliggende DBAPI-verbinding.

Als OTOH u daadwerkelijk verbinding wilt maken met andere databases bij elke aanroep, dat wil zeggen uw hardgecodeerde "localhost/test_database" is slechts een voorbeeld en je hebt eigenlijk veel verschillende databases, dan is de aanpak met dispose() is goed; het zal elke verbinding sluiten die niet is uitgecheckt bij de pool.

In alle bovenstaande gevallen is het belangrijkste dat de Connection object wordt gesloten via close() . Als u een "verbindingsloze" uitvoering gebruikt, is dat engine.execute() of statement.execute() , de ResultProxy object dat wordt geretourneerd door die uitvoeraanroep moet volledig worden gelezen, of anderszins expliciet worden gesloten via close() . Een Connection of ResultProxy die nog open is, verbiedt de NullPool of dispose() nadert van het sluiten van elke laatste verbinding.



  1. Oracle UTL_HTTP Post Multipart/Form-Data (JSON &ZIP) Voorbeeld

  2. 3 manieren om decimaal naar hexadecimaal te converteren in SQL Server (T-SQL)

  3. SSMS 2016-fout bij het importeren van Azure SQL v12 bacpac:hoofdsleutels zonder wachtwoord niet ondersteund

  4. Hoe verbinding maken met externe Oracle DB met PL/SQL Developer?