麻烦问一下各位, 下面这段代码中报错如下
代码部分
app.route('/deleteaccount/<int:account_id>', methods=['POST'])
@login_required
def delete_account(account_id) :
authed = session.get('authed')
if not authed :
return redirect(url_for('login'))
form1 = DeleteAccountForm()
account = User.query.get_or_404(account_id)
if form1.submit.data and form1.validate() :
if current_user.id != account.id :
abort(401)
flash('Usurpation')
logout_user()
db.session.delete(account)
db.session.commit()
session.pop('authed')
flash('Disposed')
else :
abort(400)
return redirect(url_for('login'))
@db.event.listens_for(User, 'after_delete', named=True)
def edit_account(**kwargs) :
target = kwargs['target']
for username in [target.username] :
if username is not None :
dis = Photo.query.filter_by(user_name=username).delete()
db.session.begin(subtransactions=True)
db.session.commit()
报错
File "/usr/local/lib/python3.10/dist-packages/flask_socketio/__init__.py", line 43, in __call__
return super(_SocketIOMiddleware, self).__call__(environ,
File "/usr/local/lib/python3.10/dist-packages/engineio/middleware.py", line 74, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 2193, in wsgi_app
response = self.handle_exception(e)
File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 2190, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 1486, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 1484, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 1469, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/usr/local/lib/python3.10/dist-packages/flask_login/utils.py", line 290, in decorated_view
return current_app.ensure_sync(func)(*args, **kwargs)
File "/var/www/html/albumy2/app.py", line 626, in delete_account
if current_user.id != account.id :
abort(401)
flash('Usurpation')
logout_user()
db.session.delete(account)
db.session.commit()
session.pop('authed')
flash('Disposed')
else :
abort(400)
return redirect(url_for('login'))
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/scoping.py", line 553, in commit
return self._proxied.commit()
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 1906, in commit
trans.commit(_to_root=True)
File "<string>", line 2, in commit
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 1221, in commit
self._prepare_impl()
File "<string>", line 2, in _prepare_impl
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 1196, in _prepare_impl
self.session.flush()
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 4154, in flush
self._flush(objects)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 4290, in _flush
with util.safe_reraise():
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/util/langhelpers.py", line 147, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 4251, in _flush
flush_context.execute()
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/unitofwork.py", line 467, in execute
rec.execute(self)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/unitofwork.py", line 681, in execute
util.preloaded.orm_persistence.delete_obj(
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/persistence.py", line 206, in delete_obj
mapper.dispatch.after_delete(mapper, connection, state)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/event/attr.py", line 487, in __call__
fn(*args, **kw)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/events.py", line 887, in wrap
fn(*arg, **kw)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/event/attr.py", line 174, in wrap_kw
return fn(**argdict)
File "/var/www/html/albumy2/app.py", line 870, in edit_account
db.session.begin(subtransactions=True)
TypeError: scoped_session.begin() got an unexpected keyword argument 'subtransactions'
但当我删去db.session.begin(subtransactions=True) 时 报错如下
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 4251, in _flush
flush_context.execute()
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/unitofwork.py", line 467, in execute
rec.execute(self)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/unitofwork.py", line 681, in execute
util.preloaded.orm_persistence.delete_obj(
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/persistence.py", line 206, in delete_obj
mapper.dispatch.after_delete(mapper, connection, state)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/event/attr.py", line 487, in __call__
fn(*args, **kw)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/events.py", line 887, in wrap
fn(*arg, **kw)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/event/attr.py", line 174, in wrap_kw
return fn(**argdict)
File "/var/www/html/albumy2/app.py", line 871, in edit_account
db.session.commit()
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/scoping.py", line 553, in commit
return self._proxied.commit()
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 1906, in commit
trans.commit(_to_root=True)
File "<string>", line 2, in commit
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 1239, in commit
self._parent.commit(_to_root=True)
File "<string>", line 2, in commit
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/state_changes.py", line 121, in _go
raise sa_exc.IllegalStateChangeError(
During handling of the above exception, another exception occurred:
File "/usr/local/lib/python3.10/dist-packages/flask_socketio/__init__.py", line 43, in __call__
return super(_SocketIOMiddleware, self).__call__(environ,
File "/usr/local/lib/python3.10/dist-packages/engineio/middleware.py", line 74, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 2193, in wsgi_app
response = self.handle_exception(e)
File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 2190, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 1486, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 1484, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python3.10/dist-packages/flask/app.py", line 1469, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args)
File "/usr/local/lib/python3.10/dist-packages/flask_login/utils.py", line 290, in decorated_view
return current_app.ensure_sync(func)(*args, **kwargs)
File "/var/www/html/albumy2/app.py", line 626, in delete_account
db.session.commit()
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/scoping.py", line 553, in commit
return self._proxied.commit()
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 1906, in commit
trans.commit(_to_root=True)
File "<string>", line 2, in commit
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 1221, in commit
self._prepare_impl()
File "<string>", line 2, in _prepare_impl
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/state_changes.py", line 137, in _go
ret_value = fn(self, *arg, **kw)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 1196, in _prepare_impl
self.session.flush()
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 4154, in flush
self._flush(objects)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 4290, in _flush
with util.safe_reraise():
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/util/langhelpers.py", line 151, in __exit__
raise value.with_traceback(traceback)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 4291, in _flush
transaction.rollback(_capture_exception=True)
File "<string>", line 2, in rollback
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/state_changes.py", line 103, in _go
self._raise_for_prerequisite_state(fn.__name__, current_state)
File "/usr/local/lib/python3.10/dist-packages/sqlalchemy/orm/session.py", line 921, in _raise_for_prerequisite_state
raise sa_exc.ResourceClosedError("This transaction is closed")
sqlalchemy.exc.ResourceClosedError: This transaction is closed