Ошибка, с которой вы мог столкнуться во втором Flask-приложении при попытке чтения данных из базы данных, может быть вызвана различными причинами. Вот некоторые из возможных проблем и решения:
### Возможные причины проблемы
1. **Кэширование**: Если оба приложения используют кэширование, то второе приложение может возвращать старые данные. Это можно устранить, изменив настройки кэширования или отключив его, как в вашем случае с `SEND_FILE_MAX_AGE_DEFAULT`.
2. **Проблемы с сессиями**: Убедитесь, что оба приложения настраиваются на одно и то же управление соединениями с базой данных. Если они используют разные сессии, возможно, требуется ручное обновление клиентского кэша.
3. **Отдельные подключения к базе данных**: Если оба приложения используют разные соединения для доступа к одной базе данных, убедитесь, что соединения правильно закрываются и работают.
4. **Асинхронность**: Если одно приложение добавляет, а другое считывает данные одновременно, можно столкнуться с состоянием гонки или несогласованными данными. Это может быть устранено путём применения замков.
### Рекомендации по организации взаимодействия
Чтобы организовать взаимодействие между двумя Flask-приложениями, использующими одну и ту же базу данных, выполните следующие шаги:
1. **Настройка базы данных**: Убедитесь, что оба приложения правильно настроены на использование одной и той же базы данных. Проверьте параметры подключения.
2. **Обновление данных**: После добавления новой записи в первом приложении попробуйте явным образом уведомить второе приложение об обновлении данных. Например, можно использовать очереди задач (например, `Celery`) или HTTP-запросы для уведомления о новых данных.
3. **Регулярные обновления**: Реализуйте возможность периодического обновления данных во втором приложении. Например, обновляйте данные каждую минуту с помощью фонового задания.
4. **Журналирование запросов**: Добавьте несколько логов в первичное приложение, чтобы точно знать, что данные добавляются, и регистрируйте любые ошибки.
5. **Обработка ошибок**: Убедитесь, что у вас есть обработка ошибок, чтобы отлавливать ошибки при считывании данных. Это поможет вам лучше понять, что идет не так, если возникает ошибка.
6. **Гарантия целостности данных**: Используйте методы оптимистической или пессимистической блокировки для предотвращения конфликтов.
### Пример кода
Вот небольшой пример кода, который показывает, как два Flask-приложения могут взаимодействовать с одной и той же базой данных, избегая кэширования:
**Первый Flask-приложение (добавление данных):**
```python
new_call = Calls(calls_date=datetime.now(),
creator=current_user.fio,
partname=request.form.get("partname"))
session.add(new_call)
session.commit()
# Уведомить о обновлении (например, через HTTP-запрос)
```
**Второе Flask-приложение (чтение данных):**
```python
@app.route('/get_calls', methods=['GET'])
def get_calls():
calls_data = session.query(Calls).order_by(Calls.id.desc()).all()
return render_template("calls_default.html", calls_data=calls_data)
```
При этом важно следить за тем, чтобы обновленные данные были доступны для второго приложения. Возможно, стоит использовать дополнительные средства для синхронизации данных между приложениями, в зависимости от ваших требований.