Есть 2 Flask приложения на разных машинах, которые обращаются к одной БД.
Код инициализации и моделей в обоих приложения идентичный.
Flask
app = Flask(__name__)
app.secret_key = KEY
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = 0
app.config['PERMANENT_SESSION_LIFETIME'] = timedelta(hours=12)
if __name__ == '__main__':
app.run()
Сокращенная модель БД
class Calls(base):
__tablename__ = 'calls'
id = Column(Integer, primary_key=True)
creator = Column(String)
partname = Column(String)
calls_date = Column(DateTime)
Добавление записи с помощью SQLAlchemy в 1ом Flask приложении:
new_call = Calls(calls_date = datetime.now().strftime("%d/%m/%Y %H:%M:%S"),
creator=current_user.fio,
partname=request.form.get("partname"))
session.add(new_call)
session.commit()
calls_data = session.query(Calls).order_by(Calls.id.desc()).all()
return render_template("calls_default.html",
calls_data=calls_data)
Данные добавляются в БД, присваивается уникальный порядковый id записи (в модели не прописано т.к. присваивается на уровне БД).
На html страницу возвращаются обновленные данные, включая этот id записи.
Читаем какое-то время спустя из 2го Flask приложения и возвращаем на страницу:
calls_data = session.query(Calls).order_by(Calls.id.desc()).all()
return render_template("calls_default.html",
calls_data=calls_data)
Получаем все записи в момент инициализации 2го приложения, но без той, которая была добавлена чуть ранее.
Более того, при попытке добавить запись из 2го приложения, оно крашится, говоря, что не может прочитать файл бд.
По ощущениям оно пытается добавить запись с тем же id, которые было создано в 1ом приложении.
1. Что-то не так с сессиями?
Инициализация сессий идентична:
engine = create_engine("access+pyodbc://login:pwd@bd_name")
base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()
2. Flask кэширует данные и отдает старые даже после обновления страницы? Но в 1 приложении данные обновляются.