sql >> Database teknologi >  >> RDS >> Mysql

SQL Alchemy Relationship loader efterlader en lås på bordet?

Du skal starte en ny transaktion før .drop_all() opkald; MySQL ser dig læse fra tabellen i denne transaktion og låser tabellen mod at blive droppet:

session.commit()
Base.metadata.drop_all()

Ved at udføre en transaktion starter implicit en ny transaktion.

MySQL giver garantier om transaktionsisolering; din transaktion vil læse ensartede data og vil ikke se ændringer begået af andre transaktioner, før du starter en ny transaktion. En DROP TABLE statement gør det imidlertid umuligt for MySQL at beholde disse garantier, så bordet bliver låst.

Alternativt kan du ændre transaktionsisolationsniveauet og fortælle MySQL, at du er ligeglad med isolationsgarantierne. Fordi sessionsforbindelser er samlet, kan dette kun gøres for alle forbindelser eller ingen overhovedet; brug isolation_level argument til create_engine() :

engine = create_engine(
    'mysql://username:[email protected]/databasename',
    isolation_level='READ UNCOMMITTED')

Se SET TRANSACTION dokumentation for detaljer om hvert isolationsniveau.




  1. MySQL LIMIT på DELETE-sætning

  2. Hvordan installerer jeg kommandolinje MySQL-klient på mac?

  3. Slut dig til 3 tabeller i SQL

  4. Slå advarsler og fejl fra på PHP og MySQL