質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.34%

flask marshmallowのエラー

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 1,683

score 14

flaskでapiを初めて作っています。
この方の動画を参考に進めていってるのですが
参考動画
apiのModelの定義のところで警告が出てしまいます。

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
import os

# Init app
app = Flask(__name__)
basedir = os.path.abspath(os.path.dirname(__file__))
# Database
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'db.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
# Init db
db = SQLAlchemy(app)
# Init ma
ma = Marshmallow(app)

# Product Class/Model
class Product(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(100), unique=True)
    description = db.Column(db.String(200))
    price = db.Column(db.Float)
    qty = db.Column(db.Integer)

    def __init__(self, name, description, price, qty):
        self.name = name
        self.description = description
        self.price = price
        self.qty = qty

# Product Schema
class ProductSchema(ma.Schema):
    class Meta:
        fields = ('id', 'name', 'description', 'price', 'qty')

# Init schema
product_schema = ProductSchema()
products_schema = ProductSchema(many=True)


# Run Server
if __name__ == '__main__':
    app.run(debug=True)


class Product(db.Model):
の(db.Model)が警告出ているところです
警告内容は

Inheriting 'db.Model', which is not a class.Python(inherit-non-class)


Pythonのclassではないと怒られているように解釈できますが
原因がわかりません。
python app.py でプログラムを走らせると
動きます。

また、動画内では

product_schema = ProductSchema(strict=True)
products_schema = ProductSchema(many=True, strict=True)


このように定義していますがエラーが出てしまって
動きません。

TypeError: __init__() got an unexpected keyword argument 'strict'

下記のようにすると
エラーはなくなるのですが、strictの意味がよくわかっていません。

product_schema = ProductSchema()
products_schema = ProductSchema(many=True)

これから勉強していくところで最初に詰まってしまいました。
色々調べて見たのですが、解決しないのでこちら質問させていただきました。
どなたかわかる方、教えてください。
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

(marshmallowが何か良くわかっていないので見当違いな回答になるかもしれません)

strict

調べたところ、変更履歴が引っかかりました。
Changelog 3.0.0b7 (2018-02-03)

3.0.0b7に、「The strict parameter is removed.」とあるので、strictは不要になったのだと思います。

バージョン番号無しで pip install marshmallow を実行したところ、以下のバージョンが入りましたので、質問者さんの環境でも(バージョン指定してインストールしていなければ)似たような環境になっていると思います。

marshmallow==3.0.3

db.Modelのエラー

以下のコードをcloneして実行したところ、エラーは発生しませんでした。

REST API With Flask & SQL Alchemy

モジュールが足りないのかもしれないので、pip freezeの結果を以下に記載します。
インストールしてから試してみてください。

Click==7.0
Flask==1.1.1
flask-marshmallow==0.10.1
Flask-SQLAlchemy==2.4.0
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
marshmallow==3.0.3
marshmallow-sqlalchemy==0.17.2
six==1.12.0
SQLAlchemy==1.3.8
Werkzeug==0.15.6

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/09/06 17:01

    python3.7.3を使用してます。

    vs codeを使用しているのですが、警告は文は統合ターミナルがあるところの問題ってとこで
    警告が出てます。
    app.pyファイルを実行しても特にエラーは出ない状態です。
    3.7.4verにしてみたほうがいいですかね?

    キャンセル

  • 2019/09/06 17:15

    もしかして、↓ですか?

    https://stackoverflow.com/questions/57211894/inheriting-base-which-is-not-a-class-in-vs-code-using-sqlalchemy-declarativ

    これは無視して良いと思います。
    たぶん、VS Codeがdb.Modelを見つけられないんじゃないかなと。

    app.pyを実行するときにエラーが出ないのなら、何もエラーはでていないはずです。
    VS Codeは便利ですが、Pythonに特化しているわけではないので、余計なものも表示されます。
    PyCharm等のPython用のIDEを使った方が良いかもしれませんね。

    PyCharmを使う場合、Webアプリ(Flask, Django)をデバッグしやすいのはProfessional版です。
    余裕があれば購入してしまった方がいいです。
    DBの確認も簡単になりますし。

    キャンセル

  • 2019/09/06 18:00

    まさにこれです!!

    無視しても大丈夫なんですね!
    確かにプログラムの実行しても、エラーは出ないので問題はなさそうな気は
    していたのですけど、初めて作るので何か方法がないかと色々探してたので
    ありがとうございます!
    これで安心しました。
    やはりPyCharmの方がいいんですね。検討してみます。
    ありがとうございました。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.34%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る