AttributeError: объект «DummySession» не имеет атрибута «запрос» при загрузке схемы M2M с помощью Click/FlaskPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 AttributeError: объект «DummySession» не имеет атрибута «запрос» при загрузке схемы M2M с помощью Click/Flask

Сообщение Anonymous »

Я использую шаблон фабрики приложений, и у меня есть объект Article, который относится к категории в отношениях M2M. Пока все маршруты в API работают как положено. Я могу создавать статьи с категориями с помощью POST MethodViews.

Однако я пытаюсь внести некоторые образцы данных в свою базу данных, щелкнув мышью в отдельном файле. Сначала я думал, что проблема связана с Flask CLI и контекстом приложения, который изначально был у меня в проекте, но потом я понял, что проблема гораздо глубже. Я вижу эту проблему, но я обновил свой Marshmallow/Flask-Marshmallow/Marshmallow-Sqlalchemy до последней версии:

https://github.com/marshmallow-code /marshmallow-sqlalchemy/issues/20#issuecomment-136400602

// model.py

class CRUDMixin():

@classmethod
def find_by_id(cls, _id):
return cls.query.filter_by(id=_id).first()

@classmethod
def find_all(cls):
return cls.query.all()

def save_to_db(self):
db.session.add(self)
return db.session.commit()

def update(self):
return db.session.commit()

def delete_from_db(self):
db.session.delete(self)
return db.session.commit()

class CategoryModel(db.Model, CRUDMixin):
__tablename__ = "api_category"

id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)

def __repr__(self):
return ''.format(self.id)

class ArticleModel(db.Model, CRUDMixin):
__tablename__ = 'api_article'

id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
description = db.Column(db.Text)

categories = db.relationship('CategoryModel', secondary=api_category_article, lazy='subquery',
backref=db.backref('articles', lazy=True))

def __repr__(self):
return ''.format(self.id)


//schema.py

class CategoryPostSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model = CategoryModel
dump_only = ("name", )
load_only = ("articles", )
load_instance = True

class ArticlePostSchema(ma.SQLAlchemyAutoSchema):
categories = ma.Nested(CategoryPostSchema, many=True)

class Meta:
model = ArticleModel
dump_only = ("id",)
include_fk = True
load_instance = True
include_relationships = True
sqla_session = db.session


//resource.py

class ArticleListView(MethodView):

def __init__(self):
pass

@classmethod
def get(cls):
data = ArticleModel.find_all()
return jsonify({"data": article_list_schema.dump(data),
"count": len(data),
"status": 200
})

@classmethod
def post(cls):

req_json = request.get_json()
errors = article_post_schema.validate(req_json)

if errors:
response = jsonify({'errors': errors, "status": 400})
response.status_code = 400
return response

data = article_post_schema.load(req_json)
data.save_to_db()

response = jsonify({"data": article_post_schema.dump(data), "errors": {}, "status": 201})
response.status_code = 201
return response


// Initialize.py (в корневом каталоге)

import click

from marshmallow import ValidationError

from api import create_app
from api.db import db
from api.schemas import ArticlePostSchema

app = create_app()

@click.group()
def cli():
pass

@cli.command()
def article():
with app.app_context():

article_post_schema = ArticlePostSchema()

entry = {"name":"My Family Vacation 5",
"description":"That time we took a road trip to Europe",
"categories":[{"id": 1}]
}

data = article_post_schema.load(entry, session=db.session)
data.save_to_db()
print("Success")

if __name__ == '__main__':
cli()


// Ошибка

Traceback (most recent call last):
File "initialize.py", line 41, in
cli()
...
File "initialize.py", line 29, in article
data = article_post_schema.validate(entry)
...
return self.session.query(self.opts.model).filter_by(**filters).first()
AttributeError: 'DummySession' object has no attribute 'query'


Подробнее здесь: https://stackoverflow.com/questions/619 ... oading-m2m
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»