sql >> Databasteknik >  >> RDS >> Mysql

SQL Alchemy Relationship loader lämnar ett lås på bordet?

Du måste starta en ny transaktion före .drop_all() ringa upp; MySQL ser att du läser från tabellen i den här transaktionen och låser tabellen mot att släppas:

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

Att utföra en transaktion startar implicit en ny transaktion.

MySQL ger garantier om transaktionsisolering; din transaktion kommer att läsa konsekventa data och kommer inte att se ändringar som begåtts av andra transaktioner förrän du startar en ny transaktion. En DROP TABLE statement gör det dock omöjligt för MySQL att behålla dessa garantier så att bordet låses.

Alternativt kan du ändra transaktionsisoleringsnivån och berätta för MySQL att du inte bryr dig om isoleringsgarantierna. Eftersom sessionsanslutningar är poolade, kan detta endast göras för alla anslutningar eller inga alls; använd isolation_level argument till create_engine() :

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

Se SET TRANSACTION dokumentation för detaljer om varje isoleringsnivå.




  1. Hur man skyddar MySQL-databaser från Ransomware-kampanjer

  2. Felsökning:För många omdirigeringar

  3. mysql-fråga för att få antal per grupp och totalt antal

  4. Ändra på Big Table i RDS Lösning till tabell fullt fel