Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy在放置桌子时被阻止_Python_Mysql_Sqlalchemy - Fatal编程技术网

Python SQLAlchemy在放置桌子时被阻止

Python SQLAlchemy在放置桌子时被阻止,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,除了最后一行之外,代码是sqlahcmey的逐步副本, 我打算在查询之后删除所有表。但是程序在Base.metadata.drop_all(bind=engine)上被阻塞,下面是MySQL当时的状态(取自MySQL Workbench): 如标记行所示,由于 表元数据锁,我建议元数据锁是由result=session.query(User).all()引起的,因为如果删除了该行,程序不会阻塞该行, 但我还是不知道原因。所以我的问题是:为什么会发生这种情况,如何避免阻塞 #/usr/bin/e

除了最后一行之外,代码是sqlahcmey的逐步副本, 我打算在查询之后删除所有表。但是程序在
Base.metadata.drop_all(bind=engine)
上被阻塞,下面是MySQL当时的状态(取自MySQL Workbench):

如标记行所示,由于
表元数据锁
,我建议元数据锁是由
result=session.query(User).all()
引起的,因为如果删除了该行,程序不会阻塞该行, 但我还是不知道原因。所以我的问题是:为什么会发生这种情况,如何避免阻塞

#/usr/bin/env python
#-*-编码:utf-8-*-
从sqlalchemy导入创建引擎
从sqlalchemy.orm导入sessionmaker
从sqlalchemy.ext.declarative导入声明性基础
从sqlalchemy导入列,整数,字符串
Base=声明性_Base()
类用户(基本):
__tablename_uu='users'
id=列(整数,主键=True)
名称=列(字符串(16))
全名=列(字符串(16))
密码=列(字符串(16))
定义初始化(self、name、fullname、password):
self.name=名称
self.fullname=fullname
self.password=密码
定义报告(自我):
返回“”%(self.name、self.fullname、self.password)
乌里mysql://root:zxsaqw21@localhost/test_sa'
引擎=创建引擎(uri,echo=False)
Base.metadata.create_all(引擎)
会话=会话生成器(绑定=引擎)
会话=会话()
user=user('ed','ed Jones','edspassword')
session.add(用户)
session.commit()
结果=session.query(用户).all()
打印透镜(结果)
Base.metadata.drop_all(bind=engine)
在执行drop_all()之前调用session.close()(或commit(),或rollback())。会话仍处于打开的事务上

本教程针对的是没有主动表锁定的sqlite(我假设您的MySQL数据库在这里使用InnoDB)。

谢谢,我明白了!解释我遇到的同样的事情吗?是的(填写15个字符)