Задать вопрос
  • Как избавиться от ошибки при использовании двух баз данных в Flask-SqlAlchemy?

    @Dinxor Автор вопроса
    Добавление копии справочника во вторую базу не поможет - его не удастся прописать в модели данных, т.к. имя уже занято. Поэтому придётся создавать во второй базе его копию под другим именем и ссылаться уже на него. Потом поддерживать актуальность этого зоопарка... а что если баз не две, а больше, и справочников тоже?
    Можно конечно имя справочника оставить и создать представление на него, но всё равно как-то криво. Неужели никто с таким не сталкивался? Или я творю что-то странное и так делать не принято? Но на старой версии всё отлично работает, несмотря на то, что базы разных СУБД и лежат на разных серверах. По моему мнению, именно для упрощения подобных вещей и нужна алхимия.
    P.S. Сложность вопроса поменялась на "простой", это реально просто?
    Написано
  • Что почитать по программированию без кода?

    @Dinxor
    Пузыри. Айти для детей и их родителей Ивана Бевуча
    Написано
  • Как организовать одностороннюю синхронизацию между двумя БД?

    @Dinxor Автор вопроса
    rPman, обновлений в таблице нет - только добавление новых данных и удаление старых по расписанию, я об этом уже писал. Новый столбец добавить можно - когда-то давно в таблицу уже добавлялись вычисляемые столбцы, и на работу программы это не повлияло. Просто не хотелось увеличивать нагрузку на базу, в ходе обсуждения возникло компромиссное решение - добавить автоинкрементный столбец, но его заполнение включить только для новых данных. Тогда контроль целостности данных можно будет организовать по этому столбцу, а старые достаточно перенести один раз. Наверное, так и сделаю.
    Firebird 2.1 очень экономно расходует память, но проседает в быстродействии и плохо реагирует на массовые удаления данных. Переход на Timescale должен дать прирост скорости от 2 раз на простом листании страниц до 10 на сложных запросах, потом ещё можно разделить мгновенные, часовые и суточные данные по разным таблицам.
    Написано
  • Как организовать одностороннюю синхронизацию между двумя БД?

    @Dinxor Автор вопроса
    rPman, мне почему-то кажется, что дешевле выйдет в существующую таблицу добавить столбец с автоинкрементом, но запустить его заполнение только для новых записей. Конечно, старые придётся один раз выкачать, пройдясь по уникальным связкам код+время, но остальная поддержка целостности будет обеспечена автоматически
    Написано
  • Как организовать одностороннюю синхронизацию между двумя БД?

    @Dinxor Автор вопроса
    Трогать существующую таблицу пока нежелательно - её читают ещё и другие клиенты, которых предстоит пересадить на web. Да и сама программа проверяет наличие предыдущих данных в этой таблице. А вот потом да, нужно будет придумывать какую-то автоматизацию вокруг базы и программы, которая написана 17 лет назад и переписывать её вряд ли будут. Думаю, тут получится даже не велосипед, а шагающий (на костылях) экскаватор :)
    Написано
  • Как организовать одностороннюю синхронизацию между двумя БД?

    @Dinxor Автор вопроса
    триггеры на delete, update и insert, для каждой таблицы

    На самом деле таблица одна, и меня вполне устроил бы триггер только на insert - обновлений данных нет, а план удаления на принимающей стороне скорее всего будет свой, т.к. там нет жесткого ограничения на размер базы. Но я пытаюсь избежать лишней нагрузки на Firebird, он плохо переносит массовые удаления данных и требует периодической процедуры бэкапа/восстановления для дефрагментации.
    Для мгновенных значений по одному коду сделал бесконечный цикл на Python с контролем по времени, работает отлично. Можно так же перебирать остальные коды, тут проблем нет. С архивными сложнее - потребуется бегать по справочнику, проверять наличие всех данных и дозапрашивать недостающие. Я хотел сначала узнать, нет ли готового решения, заточенного под такую задачу. Ну или общепринятых алгоритмов.
    Написано
  • Почему не работает авторизация?

    @Dinxor
    Обратите внимание на эту строку:
    if user and (user['password'], request.form['password']):

    Может, там должно быть сравнение паролей?
    if user and (user['password'] == request.form['password']):
  • Как восстановить byte строку?

    @Dinxor
    instr = "x\\xda\\x15\\xc1m\\x13B0\\x00\\x00\\xe0_\\xe4NY\\x97>\\xf8`\\xde\\xc6e\\xa1X\\xe7\\xcb\\x8eU\\x13S\\xcd\\x14\\xfa\\xf5]\\xcf\\xc3\\xed?\\xd88\\x1dj{U\\x1fw\\x8b\\xa3\\xaf\\x8d\\xd0|\\xd4e1\\xae$\\xabH\\xf7\\xcd\\x92\\x166(U\\x99\\x12o\\x94\\x82\\x9c\\xd9\\xf3\\xa7\\x9fjW\\xea \\nNX*\\xbe\\x1f\\xa9\\x18`\\xec\\xd9\\xc1\\x8c\\x87C\\x18\\x01\\\\\\x94\\x05\\xa1$\\x19\\x8d/T\\xcaG\\xf2\\x1c\\x8a\\xbb\\xcb\\x90\\xd7\\xf6\\x1eaZ\\xff\\xaa\\xe2\\x8d\\xe9\\x93a\\x12\\xad\\x0f\\xd2<c\\xe5\\x94\\x80NR.\\x9f\\xb7k@\\rM\\xa4\\x84\\xe3\\xa5\\xbal'\\xcb\\xfa\\x01\\xfbX83"
    
    rez = instr.encode()
    print(rez)
    print(type(rez))

    b"x\\xda\\x15\\xc1m\\x13B0\\x00\\x00\\xe0_\\xe4NY\\x97>\\xf8`\\xde\\xc6e\\xa1X\\xe7\\xcb\\x8eU\\x13S\\xcd\\x14\\xfa\\xf5]\\xcf\\xc3\\xed?\\xd88\\x1dj{U\\x1fw\\x8b\\xa3\\xaf\\x8d\\xd0|\\xd4e1\\xae$\\xabH\\xf7\\xcd\\x92\\x166(U\\x99\\x12o\\x94\\x82\\x9c\\xd9\\xf3\\xa7\\x9fjW\\xea \\nNX*\\xbe\\x1f\\xa9\\x18`\\xec\\xd9\\xc1\\x8c\\x87C\\x18\\x01\\\\\\x94\\x05\\xa1$\\x19\\x8d/T\\xcaG\\xf2\\x1c\\x8a\\xbb\\xcb\\x90\\xd7\\xf6\\x1eaZ\\xff\\xaa\\xe2\\x8d\\xe9\\x93a\\x12\\xad\\x0f\\xd2<c\\xe5\\x94\\x80NR.\\x9f\\xb7k@\\rM\\xa4\\x84\\xe3\\xa5\\xbal'\\xcb\\xfa\\x01\\xfbX83"
    <class 'bytes'>
  • Как сделать переадресацию на первую страницу пагинации в Flask при применении фильтра?

    @Dinxor Автор вопроса
    pcdesign, да пагинация рендерится при отдаче страницы по уже отфильтрованным данным. Я применил костыль
    if base.count() < per_page*(page-1):
        page = 1

    и отображается первая страница, но в адресной строке ещё висит старое значение. Также можно взводить отдельную переменную только при запросе страницы через фильтр, но на адресную строку это тоже не влияет. Вот и пытаюсь найти более грамотное решение.
  • Возможно ли подключиться к нескольким wi-fi сетям одновременно через одну беспроводную сетевую карту?

    @Dinxor
    Пример некорректный - на одном физическом Ethernet можно назначить несколько сетевых адресов.
  • Как сделать переадресацию на первую страницу пагинации в Flask при применении фильтра?

    @Dinxor Автор вопроса
    pcdesign, проблема есть, и похоже что она не в пагинации, а в фильтре. Вот фильтр в шаблоне страницы:
    <form "{{request.path}}" method="get">
    <input name="flt" value="{{flt_s}}">
    <button type="search" >Найти</button>
    </form>

    Тут request.path передаётся полностью, а номер страницы это его часть. С page=1 будет гораздо проще, но я пытаюсь избежать изменения плана адресации.
  • Как сделать переадресацию на первую страницу пагинации в Flask при применении фильтра?

    @Dinxor Автор вопроса
    pcdesign, не понял примера. По ссылке
    class flask_sqlalchemy.BaseQuery(entities, session=None)
    содержит метод
    paginate(page=None, per_page=None, error_out=True, max_per_page=None)
    Returns per_page items from page page.
    Returns a Pagination object.
    который возвращает объект класса
    class flask_sqlalchemy.Pagination(query, page, per_page, total, items)
    я вроде бы этим и пользуюсь?
  • Как сделать переадресацию на первую страницу пагинации в Flask при применении фильтра?

    @Dinxor Автор вопроса
    pcdesign, да, возвращаю что-то вроде render_template('base.html', base=base.paginate(page, 20), flt=flt) и всё вроде работает. Или правильнее будет какой-то другой подход?
  • Как сделать переадресацию на первую страницу пагинации в Flask при применении фильтра?

    @Dinxor Автор вопроса
    pcdesign, у меня как раз flask_sqlalchemy и роут через /int:page так что проблем с пагинацией не было до подключения фильтров. Согласен, может я что-то не так делаю но разница есть - page=5 исправить проще чем request.path в данном случае.
  • Как сделать переадресацию на первую страницу пагинации в Flask при применении фильтра?

    @Dinxor Автор вопроса
    pcdesign, посмотрел - там номер страницы передаётся через аргумент, а не путь в адресной строке как у меня. Мой случай:
    1. /base - первая страница
    2. /base/2 - вторая страница
    3. /base/5 - последняя страница
    4. /base/5?data=1 - включаем фильтр, данных меньше и на этой странице их нет
    5. /base/1?data=1 - вернулись на первую, данные есть
    Получается, мне нужно вместо шага 4 выдавать сразу шаг 5 - при применении фильтра менять ссылку. Возможно ли это в Flask или придётся перетаскивать номер страницы в "&page=1" ?