sql >> Database >  >> RDS >> Mysql

SQL Alchemy Relationship loader laat een slot op tafel?

U moet een nieuwe transactie starten vóór de .drop_all() telefoongesprek; MySQL ziet u lezen van de tafel in deze transactie en vergrendelt de tafel tegen vallen:

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

Als u een transactie uitvoert, wordt impliciet een nieuwe transactie gestart.

MySQL geeft garanties over transactie-isolatie; uw transactie leest consistente gegevens en ziet geen wijzigingen die door andere transacties zijn vastgelegd totdat u een nieuwe transactie start. EEN DROP TABLE verklaring maakt het echter onmogelijk voor MySQL om deze garanties te behouden, zodat de tafel wordt vergrendeld.

Als alternatief kunt u het transactie-isolatieniveau wijzigen en MySQL vertellen dat u niets geeft om de isolatiegaranties. Omdat sessieverbindingen worden gepoold, kan dit alleen voor alle verbindingen of helemaal niet worden gedaan; gebruik het isolation_level argument to create_engine() :

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

Zie de SET TRANSACTION documentatie voor details over elk isolatieniveau.




  1. totaal voor limiet in mysql krijgen met dezelfde query?

  2. Schakelen tussen meerdere databases in Rails zonder transacties te verbreken

  3. Laravel/ PHP:Sorteer op alfabetisch met getallen in volgorde

  4. Database bijwerken vanuit Javascript onClick By Ajax PHP