Влияют ли как-то схемы на подключение к БД в SQLAlchemy?

2ой день не могу понять почему не могу вытащить данные из контейнера БД:

from sqlalchemy import create_engine, text, Column, Integer, String, Boolean, select
from sqlalchemy.orm import registry, as_declarative, declared_attr, Mapped, mapped_column, Session
import pymysql

pymysql.install_as_MySQLdb()
engine = create_engine('mysql://root:[email protected]:3307/my_bd', echo=True)


@as_declarative()
class AbstractModel:
    id: Mapped[int] = mapped_column(autoincrement=True, primary_key=True)


class Test(AbstractModel):
    __tablename__ = 'test'
    name: Mapped[str] = mapped_column(String(100), unique=True, nullable=False)



with Session (engine) as session:
    with session.begin():
        result = session.execute(select(Test).where(Test.name == 'TestName'))
        test= result.scalar()
        print('result:', result)
        print('test:', test)
        print('test.name:', test.name)

Пародокс вот в чем:

Если создать БД в OpenServer, и создать там Таблицу, то данные вытаскиваются и все работает, но если я указываю в качестве подключения Docker-контейнер (к которому имею подключение через DataGrid), то никакой выборки нет и выдает: следующее:

2023-12-02 12:21:00,733 INFO sqlalchemy.engine.Engine SELECT DATABASE()
2023-12-02 12:21:00,733 INFO sqlalchemy.engine.Engine [raw sql] {}
2023-12-02 12:21:00,737 INFO sqlalchemy.engine.Engine SELECT @@sql_mode
2023-12-02 12:21:00,737 INFO sqlalchemy.engine.Engine [raw sql] {}
2023-12-02 12:21:00,738 INFO sqlalchemy.engine.Engine SELECT @@lower_case_table_names
2023-12-02 12:21:00,738 INFO sqlalchemy.engine.Engine [raw sql] {}
2023-12-02 12:21:00,742 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-12-02 12:21:00,746 INFO sqlalchemy.engine.Engine SELECT test.name, test.id 
FROM test
WHERE test.name = %(name_1)s
2023-12-02 12:21:00,746 INFO sqlalchemy.engine.Engine [generated in 0.00026s] {'name_1': 'TestName'}
result: <sqlalchemy.engine.result.ChunkedIteratorResult object at 0x0000026F4AB52900>
test: None
2023-12-02 12:21:00,752 INFO sqlalchemy.engine.Engine ROLLBACK
Traceback (most recent call last):
  File "D:\ESOFT\my_app\app\flask_app\test_coonect.py", line 47, in <module>
    print('test.name:', test.name)
AttributeError: 'NoneType' object has no attribute 'name'

М/б как-то влияют схемы в БД контейнера?

-- UPD: Вот скрин из DataGrid, где видно что есть схемы и таблицы в подключаемой БД (которая в контейнере) введите сюда описание изображения


Ответы (1 шт):

Автор решения: Алексей

Во-общем, моя гипотеза подтвердилсь. Надо указывать схемы, раз они используются в БД. Вот, если кто столкнется:

from sqlalchemy import Column, create_engine, ForeignKey, Integer, String, Boolean, select
from sqlalchemy.orm import declarative_base, Session
Base = declarative_base()

class Test(Base):
    __tablename__ = "test"
    __table_args__ = {"schema": "my_schema"}
    id = Column(Integer, unique=True, primary_key=True)
    name = Column(String(100), nullable=False)
    

import pymysql

pymysql.install_as_MySQLdb()
engine = create_engine('mysql://root:[email protected]:3307/my_bd', echo=True)

with Session (engine) as session:
    with session.begin():
        result = session.execute(select(Test).where(Test.name == 'TestName'))
        test = result.scalar()
        print('result:', result)
        print('test :', test )
        print('test.name:', test.name)
→ Ссылка