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

Program ładujący SQL Alchemy Relationship pozostawia blokadę na stole?

Musisz rozpocząć nową transakcję przed .drop_all() połączenie; MySQL widzi, że czytasz z tabeli w tej transakcji i blokuje tabelę przed porzuceniem:

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

Zatwierdzenie transakcji niejawnie rozpoczyna nową transakcję.

MySQL daje gwarancje dotyczące izolacji transakcji; Twoja transakcja odczyta spójne dane i nie zobaczy zmian wprowadzonych przez inne transakcje, dopóki nie rozpoczniesz nowej transakcji. DROP TABLE oświadczenie uniemożliwia jednak MySQL zachowanie tych gwarancji, więc tabela jest zablokowana.

Alternatywnie możesz zmienić poziom izolacji transakcji, informując MySQL, że nie dbasz o gwarancje izolacji. Ponieważ połączenia sesji są gromadzone, można to zrobić tylko dla wszystkich połączeń lub wcale; użyj isolation_level argument do create_engine() :

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

Zobacz SET TRANSACTION dokumentacja aby uzyskać szczegółowe informacje na temat każdego poziomu izolacji.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Relacja jeden-do-wielu w MySQL - jak zbudować model?

  2. Wypełnij Datagridview danymi MySQL

  3. Maksymalne użycie pamięci MySQL

  4. Uchwyt bazy danych DBI z funkcją AutoCommit ustawioną na 0 nie zwraca poprawnych danych za pomocą SELECT?

  5. Wybieranie wierszy, w których pole jest puste, za pomocą przygotowanych instrukcji PHP PDO i MySQL