Используется flask, sqlalchemy и oracle GLOBAL TEMPORARY TABLE с опцией ON COMMIT PRESERVE ROWS. Как создать уникальный сеанс для работы с временной таблицей? Необходимо чтобы вставка и получение данных были возможны на разных маршрутах @app.route. SQLALCHEMY_DATABASE_URI одинаков для всех пользователей. Необходимо чтобы не возникла ситуация, когда два разных браузера используют один сеанс с базой данных. Данные, вставленные во временную глобальную таблицу из одного браузера, не должны становиться доступными в другом браузере.
Для решения вашей задачи, вам нужно обеспечить уникальные сеансы для каждого пользователя, чтобы данные, вставленные во временну�� глобальную табл��цу, были изолированы между пользователями. В Flask и SQLAlchemy это можно сделать с помощью сессий и контекста приложения.
Вот пример, как это можно реал��зовать:
Настройка Flask и SQLAlchemy:
Убедитесь, что у вас настроен Flask и SQLAlchemy:
from flask import Flask, session, g
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.orm import scoped_session, sessionmaker
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'oracle+cx_oracle://user:password@host:port/dbname'
app.config['SECRET_KEY'] = 'your_secret_key'
db = SQLAlchemy(app)
# Создаем фабрику сессий
SessionFactory = sessionmaker(bind=db.engine)
# Создаем scoped_session, который будет обеспечивать уникальные сессии для каждого запроса
db_session = scoped_session(SessionFactory)
Управление сессиями:
Используйте контекст приложения Flask для управления сессиями:
@app.before_request
def before_request():
# Создаем новую сессию для каждого запроса
g.db_session = db_session()
@app.teardown_request
def teardown_request(exception=None):
# Закрываем сессию после завершения запроса
db_session.remove()
Использование временн��й таблицы:
Теперь вы можете использовать временную таблицу в разных маршрутах. Например:
@app.route('/insert', methods=['POST'])
def insert_data():
# Получаем сессию из контекста приложения
session = g.db_session
# Вставляем данные во временную таблицу
session.execute("INSERT INTO your_temp_table (column1, column2) VALUES (:value1, :value2)", {'value1': 'data1', 'value2': 'data2'})
session.commit()
return 'Data inserted'
@app.route('/fetch', methods=['GET'])
def fetch_data():
# Получаем сессию из контекста приложения
session = g.db_session
# Получаем данные из временной таблицы
result = session.execute("SELECT * FROM your_temp_table").fetchall()
return {'data': [dict(row) for row in result]}
Запуск приложения:
Запустите ваше Flask приложение:
if __name__ == '__main__':
app.run(debug=True)
Этот подход гарантирует, что каждый запрос будет использовать уникальную сессию, и данные, вставленные во временную таблицу, будут изолированы между пользователями. Важно убедиться, что SECRET_KEY
настроен для обеспечени�� безопасности сессий Flask.