Aipo e SQLAlchemy - Esse objeto de resultado não retorna linhas. Foi fechado automaticamente
Eu tenho um projeto de aipo conectado a um banco de dados MySQL. Uma das tabelas é definida assim:
class MyQueues(Base):
__tablename__ = 'accepted_queues'
id = sa.Column(sa.Integer, primary_key=True)
customer = sa.Column(sa.String(length=50), nullable=False)
accepted = sa.Column(sa.Boolean, default=True, nullable=False)
denied = sa.Column(sa.Boolean, default=True, nullable=False)
Além disso, nas configurações que tenho
THREADS = 4
E eu estou preso em uma função emcode.py
:
def load_accepted_queues(session, mode=None):
#make query
pool = session.query(MyQueues.customer, MyQueues.accepted, MyQueues.denied)
#filter conditions
if (mode == 'XXX'):
pool = pool.filter_by(accepted=1)
elif (mode == 'YYY'):
pool = pool.filter_by(denied=1)
elif (mode is None):
pool = pool.filter(\
sa.or_(MyQueues.accepted == 1, MyQueues.denied == 1)
)
#generate a dictionary with data
for i in pool: #<---------- line 90 in the error
l.update({i.customer: {'customer': i.customer, 'accepted': i.accepted, 'denied': i.denied}})
Ao executar isso, recebo um erro:
[20130626 115343] Traceback (most recent call last):
File "/home/me/code/processing/helpers.py", line 129, in wrapper
ret_value = func(session, *args, **kwargs)
File "/home/me/code/processing/test.py", line 90, in load_accepted_queues
for i in pool: #generate a dictionary with data
File "/home/me/envs/me/local/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2341, in instances
fetch = cursor.fetchall()
File "/home/me/envs/me/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 3205, in fetchall
l = self.process_rows(self._fetchall_impl())
File "/home/me/envs/me/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 3174, in _fetchall_impl
self._non_result()
File "/home/me/envs/me/local/lib/python2.7/site-packages/sqlalchemy/engine/base.py", line 3179, in _non_result
"This result object does not return rows. "
ResourceClosedError: This result object does not return rows. It has been closed automatically
Então, principalmente, é a parte
ResourceClosedError: This result object does not return rows. It has been closed automatically
e às vezes também esse erro:
DBAPIError: (Erro) (, AssertionError ('Comprimento do resultado não comprimento solicitado: \ nExpected = 1. Actual = 0. Posição: 21. Comprimento de dados: 21',)) 'SELECT accepted_queues.customer AS accepted_queues_customer, accepted_queues.acecepted AS accepted_queues_accepted , accepted_queues.denied AS accepted_queues_denied \ nFROM accepted_queues \ nALHER aceito_queues.accepted =% s OU accepted_queues.denied =% s '(1, 1)
Não consigo reproduzir o erro corretamente, como acontece normalmente ao processar muitos dados. Eu tentei mudarTHREADS = 4
para1
e os erros desapareceram. De qualquer forma, não é uma solução, pois preciso do número de threads a serem mantidos4
.
Além disso, estou confuso sobre a necessidade de usar
for i in pool: #<---------- line 90 in the error
ou
for i in pool.all(): #<---------- line 90 in the error
e não consegui encontrar uma explicação adequada para isso.
Todos juntos: qualquer um aconselha a ignorar essas dificuldades?