Flask SQLAlchemy: ошибка атрибута: атрибут пользовательского запроса отсутствует

#python #python-3.x #flask #flask-sqlalchemy

#python #python-3.x #flask #flask-sqlalchemy

Вопрос:

Я создаю подключение к базе данных для моего Flask REST API.

Поскольку я не создаю обычный веб-сайт, я не использую SQLAlchemySessionUserDatastore , вместо него я использую SQLAlchemyUserDatastore .

Проблема в том, что я не могу искать пользователей через db_user (т. Е. SQLAlchemyUserDatastore объект) и когда я пытаюсь использовать User класс. Показанная ошибка говорит о том, что query атрибут равен None.

Пример поиска пользователя:

 user = db_user.find_user(username=username, password=password)
# it raises: `AttributeError: 'NoneType' object has no attribute 'filter_by'`

user = User.query.filter_by(username=username, password=password).all()
# it raises: `AttributeError: 'NoneType' object has no attribute 'filter_by'`

user = User.query.filter(username=username, password=password).all()
# it raises: `AttributeError: 'NoneType' object has no attribute 'filter'`
  

Когда я перечисляю атрибуты пользователя, атрибут query существует, но это None :

  >>> dir(User) 
 [..., 'is_authenticated', 'metadata', 'prepare', 'query', 'query_class', 'roles']

 >>> User.query
 None
  

Кто-нибудь знает, что может происходить?

Я привожу весь код ниже.

Заранее благодарю вас.

Код:

 from catalog import app
from catalog.database import conn

...

app.config['SQLALCHEMY_DATABASE_URI'] = conn
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# Create database connection
db_connection = SQLAlchemy(app)

# auto map tables
db_connection.Model = automap_base(db_connection.Model)

# models
class User(db_connection.Model, UserMixin):
    __tablename__ = 'user'

    roles = relationship('Role', secondary='role_user',
                         backref=backref('users', lazy='dynamic', cascade='all'), cascade="all, delete-orphan",
                         passive_deletes=True, single_parent=True)


class Role(db_connection.Model, RoleMixin):
    __tablename__ = 'role'


class RoleUser(db_connection.Model):
    __tablename__ = 'role_user'

# datastore
db_user = SQLAlchemyUserDatastore(db_connection, User, Role)

security = Security(app, db_user)

...

# try to look for users by username and password

user = db_user.find_user(username=username, password=password)
# it raises: `AttributeError: 'NoneType' object has no attribute 'filter_by'`

user = User.query.filter_by(username=username, password=password).all()
# it raises: `AttributeError: 'NoneType' object has no attribute 'filter_by'`

user = User.query.filter(username=username, password=password).all()
# it raises: `AttributeError: 'NoneType' object has no attribute 'filter'`