我正在运行FastAPI和SQLAlchemy的设置,以拥有一个运行基本CRUD操作的web服务器。一段时间后,服务器在docker容器中启动,我收到以下错误消息
sqlalchemy.exc.StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back
FROM users
WHERE users.email = %s]
[parameters: [immutabledict({})]]
INFO:- "POST /routename HTTP/1.0" 500 Internal Server Error
2020-11-23T11:54:38.764592599Z ERROR: Exception in ASGI application
据我所知,这个问题与会议和会议闭幕有关。
这是有问题的路线
@app.post('/routename')
async def getLogin(request: GetLoginRequest):
...
what it does here it just fetches the current user and verifies by come parameters
...
session.close()
return JSONResponse(content=currentUser)
我不知道为什么它会崩溃,尽管最后有session.close()
。
我在应用程序的根目录中定义我的会话
SQLALCHEMY_DATABASE_URL = settings.connection_string
engine = create_engine(SQLALCHEMY_DATABASE_URL)
Session = sessionmaker(autocommit=False, autoflush=False, bind=engine)
session = Session()
Base = automap_base()
老实说,我相信这只是一个SQLAlchemy会话问题,而不是FASTApi问题,但我无法破解问题所在以及它不断崩溃的原因。
我在运行一个等待数据的长会话时遇到了同样的错误。我的解决方案:
try:
session.close()
except:
session.rollback()
session.close()