Mysql
 sql >> Base de données >  >> RDS >> Mysql

Le chargeur SQL Alchemy Relationship laisse un verrou sur la table ?

Vous devez commencer une nouvelle transaction avant le .drop_all() appel; MySQL vous voit lire à partir de la table dans cette transaction et verrouille la table contre sa suppression :

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

La validation d'une transaction commence implicitement une nouvelle transaction.

MySQL offre des garanties sur l'isolation des transactions ; votre transaction lira des données cohérentes et ne verra pas les modifications validées par d'autres transactions jusqu'à ce que vous commenciez une nouvelle transaction. Un DROP TABLE Cependant, il est impossible pour MySQL de conserver ces garanties, de sorte que la table est verrouillée.

Alternativement, vous pouvez modifier le niveau d'isolation des transactions, indiquant à MySQL que vous ne vous souciez pas des garanties d'isolation. Étant donné que les connexions de session sont regroupées, cela ne peut être fait que pour toutes les connexions ou aucune ; utilisez le isolation_level argument de create_engine() :

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

Voir le SET TRANSACTION documents pour plus de détails sur chaque niveau d'isolement.