Для отладки удобно. Сразу видно, что пришло.
Но получается перед выходом в продакшен надо будет поудалять .all()
Вот жеж как оно бывает. Потом бы думал и гадал почему подтормаживает :)
- Да, это интересная идея. Даже не задумывался о таком. Спасибо.
Хотя все получение из мемкеша сводится к одной строке:
cached = cache.get(i.UserItem.id)
- На счет .all(), без него никуда, print(items) - не печатает. Но если в цикле крутить и попробовать распечатать print(i.UserItem.id), тогда и без .all() работает. Может это с версиями как-то связано.
Вот что pip freeze показывает у меня:
Flask==0.10.1
Flask-Cache==0.13
Flask-Migrate==1.3.0
Flask-Mobility==0.1.1
Flask-PyMemcache==0.0.5
Flask-SQLAlchemy==2.0
Flask-Script==2.0.5
Jinja2==2.7.3
Mako==1.0.0
MarkupSafe==0.23
SQLAlchemy==0.9.8
Werkzeug==0.9.6
alembic==0.7.3
flask-memcache-session==2.0
gunicorn==19.1.1
inflect==0.2.4
itsdangerous==0.24
mysql-connector-python==2.0.2
pylibmc==1.4.1
pymemcache==1.2.8
python3-memcached==1.51
requests==2.5.1
six==1.9.0
sqlacodegen==1.1.5
transliterate==1.7.3
Спасибо. Да, так четка работает!
А на счет i.U.key = value в цикле, как на ваш взгляд канонично?
Сформировать отдельный словарь и передать его в темплейт?
Здравсвуйте! Спасибо за ответ!
for i in items:
print(i.id)
Так в лоб он не дает
AttributeError: 'KeyedTuple' object has no attribute 'id'
Если я кручу еще один цикл, тогда получается:
for i in items:
for a in i:
print(a.id)
В этом случае можно добраться до id.
И то там то id от User, а то id от UserItem.
То есть надо еще выбрать нужный.
На счет ключа ... По UserItem.id дальше идет обращение к memcached и оттуда получается кое-какая
инфа. Соответсвенно, можно, конечно создать отдельный словарь, чего-бы не хотелось и
передать его в темплейт.
А было бы круто засунуть эту информацию взятую из мемкеша прямо в items.
Да, так работает.
Подскажите плз, как корректно наследовать это.
Вот у меня есть файлик models.py
В нем лежит следующее:
###############
from flask.ext.sqlalchemy import SQLAlchemy
from sqlalchemy import inspect
db = SQLAlchemy()
class Android(db.Model):
class AppleRegionClas(db.Model):
class Arch(db.Model):
и т.д. 100500 классов.
###############
Все это мне нагенерил sqlacodegen.
А дальше я этот файлик подгружаю
from models import *
Как здесь правильно для всех классов переопределить __repr__ ?
- Функция inspect
from sqlalchemy import inspect
pk = inspect(rows).identity
print(pk)
Получил вот такое:
sqlalchemy.exc.NoInspectionAvailable: No inspection system is available for object of type
- А на счет def __repr__ - это же насколько код разбухнет, если в каждый класс такое вставить :)
И ассоциации там, конечно, есть во множестве.
Есть какой-то другой путь?
Не понял на счет "перезагрузить".
И какой дебагер надо использовать для 3.x во Flask, чтобы заглядывать во внутрь объекта, который получается из запроса sqlalchemy?
Я хочу увидеть, что приходит от MySQL, не крутя циклов.
xSkyFoXx , в перле просто уже почти стандарт дефакто Data::Dumper: perldoc.perl.org/Data/Dumper.html
Засовываешь туда любую структуру и она распечатывается со всеми потрохами.
Вот я и назвал дампер, хотя может быть в терминологии ошибаюсь.
Все остальное, так же как у вас.
Интересный вопрос, можно ли избавится и от этой функции, а в качестве key_prefix выдрать аргумент,
который передается в декоратор
@mobile_template('{mobile/}index.html')
qmax: В наследство досталась база, в которой стопяцот таблиц. И в каждой таблице десятки миллионов записей. Лишний раз трогать - совершенно не тянет. Добавлю, конечно, если не найду ничего получше.
Добавил вот такой код:
pastebin.com/xTvKhyHg
Логи появились, даже ротейтятся.