sql >> Databáze >  >> RDS >> Mysql

SQL Alchemy Relationship loader zanechává zámek na stole?

Novou transakci musíte zahájit před .drop_all() volání; MySQL v této transakci vidí, že čtete z tabulky, a uzamkne tabulku proti zahození:

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

Potvrzení transakce implicitně zahájí novou transakci.

MySQL poskytuje záruky ohledně izolace transakcí; vaše transakce bude číst konzistentní data a neuvidí změny provedené jinými transakcemi, dokud nezačnete novou transakci. DROP TABLE prohlášení však znemožňuje MySQL zachovat tyto záruky, takže tabulka je uzamčena.

Případně můžete změnit úroveň izolace transakcí a říci MySQL, že vás nezajímají záruky izolace. Protože připojení relací jsou sdružená, lze to provést pouze pro všechna připojení nebo pro žádné; použijte isolation_level argument pro create_engine() :

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

Viz SET TRANSACTION dokumentaci podrobnosti o každé úrovni izolace.




  1. Mám ping na server mysql před každým dotazem?

  2. Všechny sloupce jsou nastaveny na stejnou hodnotu

  3. mysql zkopírujte datový typ sloupce do jiné tabulky

  4. Prohoďte hodnoty dvou sloupců mezi dvěma tabulkami