Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Web
  • » Flask SqlAlchemy ошибка при запросе - AttributeError: Neither 'count' object nor 'Comparator' object has an attribute '_autoflush' [RSS Feed]

#1 Авг. 15, 2014 10:23:59

likin
От:
Зарегистрирован: 2010-03-15
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

Flask SqlAlchemy ошибка при запросе - AttributeError: Neither 'count' object nor 'Comparator' object has an attribute '_autoflush'

Доброго дня.

У меня вот такая ошибка.

AttributeError: Neither ‘count’ object nor ‘Comparator’ object has an attribute ‘_autoflush’
Появляется она когда я использую sqlalchemy.func в запросах, от обьектов db.Query <- Этот обьект появляется с пакета Flask-Alschemy. Если использую db.session.query, работает нормально. Хочу использовать db.Query так как добавляет paginate.

Вот так выглядит запросы:
s = db.Query(UserModel, func.count(FriendModel.friend_id)).select_from(UserModel).outerjoin(FriendModel, and_(UserModel.id==FriendModel.user_id)).group_by(FriendModel.user_id).subquery()
    paginator = db.Query(FriendModel).outerjoin(s, FriendModel.user_id==s.c.id).paginate(page, per_page)


Лог ошибки.
    File "/home/viktor/venvs/flask_test_task/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
    File "/home/viktor/venvs/flask_test_task/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
    File "/home/viktor/venvs/flask_test_task/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
    File "/home/viktor/venvs/flask_test_task/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
    File "/home/viktor/venvs/flask_test_task/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
    rv = self.handle_user_exception(e)
    File "/home/viktor/venvs/flask_test_task/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
    reraise(exc_type, exc_value, tb)
    File "/home/viktor/venvs/flask_test_task/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
    File "/home/viktor/venvs/flask_test_task/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
    File "/home/viktor/venvs/flask_test_task/lib/python2.7/site-packages/flask_classy.py", line 200, in proxy
    response = view(**request.view_args)
    File "/home/viktor/venvs/flask_test_task/lib/python2.7/site-packages/flask_login.py", line 758, in decorated_view
    return func(*args, **kwargs)
    File "/home/viktor/github/flask_test_task/core/views/profile.py", line 53, in list
    users, pagination = current_user.get_users(page, 4)
    File "/home/viktor/github/flask_test_task/core/model/user.py", line 65, in get_users
    paginator = db.Query(FriendModel).outerjoin(s, FriendModel.user_id==s.c.id).paginate(page, per_page)
    File "/home/viktor/venvs/flask_test_task/lib/python2.7/site-packages/flask_sqlalchemy/__init__.py", line 405, in paginate
    items = self.limit(per_page).offset((page - 1) * per_page).all()
    File "/home/viktor/venvs/flask_test_task/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2300, in all
    return list(self)
    File "/home/viktor/venvs/flask_test_task/lib/python2.7/site-packages/sqlalchemy/orm/query.py", line 2411, in __iter__
    self.session._autoflush()
    AttributeError: 'NoneType' object has no attribute '_autoflush

Спасибо.



Офлайн

#2 Авг. 15, 2014 10:50:29

likin
От:
Зарегистрирован: 2010-03-15
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

Flask SqlAlchemy ошибка при запросе - AttributeError: Neither 'count' object nor 'Comparator' object has an attribute '_autoflush'

Смотрю на сгенерированный запрос и понимаю, что func.count(FriendModel.friend_id) не отработал.

SELECT friend_table.id AS friend_table_id, friend_table.user_id AS friend_table_user_id, friend_table.friend_id AS friend_table_friend_id, friend_table.status AS friend_table_status 
FROM friend_table LEFT OUTER JOIN (SELECT user_table.id AS id 
FROM user_table LEFT OUTER JOIN friend_table ON user_table.id = friend_table.user_id GROUP BY friend_table.user_id) AS anon_1 ON friend_table.user_id = anon_1.id



Офлайн

#3 Авг. 15, 2014 10:52:19

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Flask SqlAlchemy ошибка при запросе - AttributeError: Neither 'count' object nor 'Comparator' object has an attribute '_autoflush'

likin
func.count(FriendModel.friend_id)
ты сумируешь FK? зачем?

Офлайн

#4 Авг. 15, 2014 11:26:36

likin
От:
Зарегистрирован: 2010-03-15
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

Flask SqlAlchemy ошибка при запросе - AttributeError: Neither 'count' object nor 'Comparator' object has an attribute '_autoflush'

Офлайн

#5 Авг. 15, 2014 11:27:59

likin
От:
Зарегистрирован: 2010-03-15
Сообщения: 114
Репутация: +  1  -
Профиль   Отправить e-mail  

Flask SqlAlchemy ошибка при запросе - AttributeError: Neither 'count' object nor 'Comparator' object has an attribute '_autoflush'

Singularity
ты сумируешь FK? зачем?
Походу, не суммирую, а считаю, количество.

Вроде бы в этом случае можно использовать без параметра func.count()



Офлайн

#6 Авг. 15, 2014 11:30:34

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Flask SqlAlchemy ошибка при запросе - AttributeError: Neither 'count' object nor 'Comparator' object has an attribute '_autoflush'

Офлайн

  • Начало
  • » Web
  • » Flask SqlAlchemy ошибка при запросе - AttributeError: Neither 'count' object nor 'Comparator' object has an attribute '_autoflush'[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version