Создание сессии БД Oracle flask
Подскажите пожалуйста как правильно создавать сессию для выборки данных из БД Oracle по условию. У меня есть БД на Oracle. В данном примере рассматриваю выборку из таблицы physical_person. Вот мой код:
import cx_Oracle as co
import os
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
from datetime import date
db_user = os.environ.get('DBAAS_USER_NAME', '*****')
db_password = os.environ.get('DBAAS_USER_PASSWORD', '*******')
db_connect = os.environ.get('DBAAS_DEFAULT_CONNECT_DESCRIPTOR', "**********:****/*************")
service_port = os.environ.get('PORT', '8080')
app = Flask(__name__)
db = SQLAlchemy(app)
class PhysicalPerson(db.Model):
__tablename__ = 'physical_person'
subject_id = db.Column(db.String(20), primary_key=True, unique=True)
last_name = db.Column(db.String(50))
first_name = db.Column(db.String(25))
middle_name = db.Column(db.String(25))
sex = db.Column(db.String(1))
birth_date = db.Column(db.DateTime)
birth_place = db.Column(db.String(50))
person_e_mail = db.Column(db.String(50))
person_document_type = db.Column(db.Integer)
person_document_serial = db.Column(db.String(15))
person_document_number = db.Column(db.String(20))
person_document_vydan_date = db.Column(db.DateTime)
person_document_vydan = db.Column(db.String(300))
def __repr__(self):
return f'<physicalperson {self.id}>'
@app.route('/')
def connect_db():
connection = co.connect(db_user, db_password, db_connect)
cur = connection.cursor()
cur.execute("""Select LAST_NAME, FIRST_NAME, MIDDLE_NAME, to_date(BIRTH_DATE) from physical_person pp
where pp.LAST_NAME = '*******' and pp.first_name = '********' and pp.middle_name = '********'
and pp.birth_date = to_date('**.**.****', 'dd.mm.yyyy')""")
col = cur.fetchone()[0]
cur.close()
connection.close()
return col
pp = db.session.query(PhysicalPerson).filter(PhysicalPerson.subject_id == 15931287).one()
print(pp)
Как работает соединение в модуле cx_Oracle понимаю, в функции он отрабатывает, если хотим работать с web-мордой, но опять же хотелось бы понимать на примере сессий, также понимаю что потом это придется расширять пулами соединений, но для начала понять бы как работает сессия. Не могу понять как создать сессию(работать с ней) которая будет работать внутри python и будет выдавать мне результат, при обращение к таблице определенной в классе PhysicalPerson. Этот вопрос относиться к последним двум строчкам кода:
pp = db.session.query(PhysicalPerson).filter(PhysicalPerson.subject_id == 15931287).one()
print(pp)
где я хочу понять есть ли например у меня человек с таким subject_id, и если есть вывел мне его информацию, согласно столбцам таблицы. При попытке выполнить запрос получаю ошибку, в которой он мне говорит что нету такой таблицы и просит перейти в документацию по созданию сессий:
C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\flask_sqlalchemy\__init__.py:851: UserWarning: Neither SQLALCHEMY_DATABASE_URI nor SQLALCHEMY_BINDS is set. Defaulting SQLALCHEMY_DATABASE_URI to "sqlite:///:memory:".
warnings.warn(
C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\flask_sqlalchemy\__init__.py:872: FSADeprecationWarning: SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True or False to suppress this warning.
warnings.warn(FSADeprecationWarning(
Traceback (most recent call last):
File "C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\sqlalchemy\engine\base.py", line 1808, in _execute_context
self.dialect.do_execute(
File "C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\sqlalchemy\engine\default.py", line 732, in do_execute
cursor.execute(statement, parameters)
sqlite3.OperationalError: no such table: physical_person
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "C:/Users/volodinko/PycharmProjects/DarK/app_v0.1/12312321.py", line 53, in <module>
pp = db.session.query(PhysicalPerson).filter(PhysicalPerson.subject_id == 15931287).one()
File "C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\sqlalchemy\orm\query.py", line 2856, in one
return self._iter().one()
File "C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\sqlalchemy\orm\query.py", line 2894, in _iter
result = self.session.execute(
File "C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\sqlalchemy\orm\session.py", line 1692, in execute
result = conn._execute_20(statement, params or {}, execution_options)
File "C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\sqlalchemy\engine\base.py", line 1620, in _execute_20
return meth(self, args_10style, kwargs_10style, execution_options)
File "C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\sqlalchemy\sql\elements.py", line 325, in _execute_on_connection
return connection._execute_clauseelement(
File "C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\sqlalchemy\engine\base.py", line 1487, in _execute_clauseelement
ret = self._execute_context(
File "C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\sqlalchemy\engine\base.py", line 1851, in _execute_context
self._handle_dbapi_exception(
File "C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\sqlalchemy\engine\base.py", line 2032, in _handle_dbapi_exception
util.raise_(
File "C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\sqlalchemy\util\compat.py", line 207, in raise_
raise exception
File "C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\sqlalchemy\engine\base.py", line 1808, in _execute_context
self.dialect.do_execute(
File "C:\Users\volodinko\PycharmProjects\DarK\venv_1\lib\site-packages\sqlalchemy\engine\default.py", line 732, in do_execute
cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) no such table: physical_person
[SQL: SELECT physical_person.subject_id AS physical_person_subject_id, physical_person.last_name AS physical_person_last_name, physical_person.first_name AS physical_person_first_name, physical_person.middle_name AS physical_person_middle_name, physical_person.sex AS physical_person_sex, physical_person.birth_date AS physical_person_birth_date, physical_person.birth_place AS physical_person_birth_place, physical_person.person_e_mail AS physical_person_person_e_mail, physical_person.person_document_type AS physical_person_person_document_type, physical_person.person_document_serial AS physical_person_person_document_serial, physical_person.person_document_number AS physical_person_person_document_number, physical_person.person_document_vydan_date AS physical_person_person_document_vydan_date, physical_person.person_document_vydan AS physical_person_person_document_vydan
FROM physical_person
WHERE physical_person.subject_id = ?]
[parameters: (15931287,)]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
Заранее благодарю!