#python #sql #python-3.x #postgresql #sqlalchemy
Вопрос:
Во время выполнения этой функции я иногда получаю ошибку: 'NoneType' object has no attribute ' twophase'
в sqlalchemy.
async def update_category_in_db(self, id_okolo: str, body: dict):
await async_db_session.init()
try:
query = select(Category).where(Category.id_ras == body['categories'[0]['article']).join(Partner).where(
Partner.code_okolo == body['partner'])
result = await async_db_session.execute(query)
product = result.scalars().first()
product.id_okolo = id_okolo
await async_db_session.commit()
return True
except Exception as e:
logger.error(
f'ERROR {e} in file: {os.path.abspath(__file__)} method: update_category_in_db')
finally:
await async_db_session.conn_close()
Я буду благодарен за любые идеи или подсказки.
Драйвер DB-PostgreSQL 13.3-asyncpg
Это мой объект сеанса:
class AsyncDatabaseSession(object):
def __init__(self):
self._session = None
self._engine = None
def __getattr__(self, name):
return getattr(self._session, name)
async def init(self):
self._engine = create_async_engine(
'postgresql asyncpg://{user}:{password}@{host}:{port}/{db}'.format(
user=os.getenv('POSTGRES_USER'),
password=os.getenv('POSTGRES_PASSWORD'),
host=os.getenv('POSTGRES_HOST'),
port=os.getenv('POSTGRES_PORT'),
db=os.getenv('POSTGRES_DB')
)
)
self._session = sessionmaker(
self._engine, expire_on_commit=False, class_=AsyncSession,
)()
async_db_session = AsyncDatabaseSession()
У меня также есть обратная связь, из которой мне мало что понятно … куда могла пойти сессия?
Traceback (most recent call last):
File "/src/okolo_server/nomenclature.py", line 81, in update_category_in_db
await Product.update(product.id, id_okolo=id_okolo)
File "/src/models/mixin.py", line 21, in update
await async_db_session.execute(query)
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/ext/asyncio/session.py", line 145, in execute
**kw
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/util/_concurrency_py3k.py", line 122, in greenlet_spawn
result = context.switch(value)
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1676, in execute
conn = self._connection_for_bind(bind, close_with_result=True)
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 1527, in _connection_for_bind
engine, execution_options
File "/usr/local/lib/python3.7/site-packages/sqlalchemy/orm/session.py", line 754, in _connection_for_bind
if self.session.twophase and self._parent is None:
AttributeError: 'NoneType' object has no attribute 'twophase'
У меня также есть обратная связь, из которой мне мало что понятно … куда могла пойти сессия?