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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Q&A

解決済

1回答

1355閲覧

flask marshmallowのエラー

sora36

総合スコア14

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

0グッド

0クリップ

投稿2019/09/05 08:04

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

python

1from flask import Flask, request, jsonify 2from flask_sqlalchemy import SQLAlchemy 3from flask_marshmallow import Marshmallow 4import os 5 6# Init app 7app = Flask(__name__) 8basedir = os.path.abspath(os.path.dirname(__file__)) 9# Database 10app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'db.sqlite') 11app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False 12# Init db 13db = SQLAlchemy(app) 14# Init ma 15ma = Marshmallow(app) 16 17# Product Class/Model 18class Product(db.Model): 19 id = db.Column(db.Integer, primary_key=True) 20 name = db.Column(db.String(100), unique=True) 21 description = db.Column(db.String(200)) 22 price = db.Column(db.Float) 23 qty = db.Column(db.Integer) 24 25 def __init__(self, name, description, price, qty): 26 self.name = name 27 self.description = description 28 self.price = price 29 self.qty = qty 30 31# Product Schema 32class ProductSchema(ma.Schema): 33 class Meta: 34 fields = ('id', 'name', 'description', 'price', 'qty') 35 36# Init schema 37product_schema = ProductSchema() 38products_schema = ProductSchema(many=True) 39 40 41# Run Server 42if __name__ == '__main__': 43 app.run(debug=True) 44

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)

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

strict

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

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

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

text

1marshmallow==3.0.3

db.Modelのエラー

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

REST API With Flask & SQL Alchemy

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

text

1Click==7.0 2Flask==1.1.1 3flask-marshmallow==0.10.1 4Flask-SQLAlchemy==2.4.0 5itsdangerous==1.1.0 6Jinja2==2.10.1 7MarkupSafe==1.1.1 8marshmallow==3.0.3 9marshmallow-sqlalchemy==0.17.2 10six==1.12.0 11SQLAlchemy==1.3.8 12Werkzeug==0.15.6

投稿2019/09/05 09:15

FiroProchainezo

総合スコア2387

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sora36

2019/09/06 01:30

strictmのオプション?無くなっていたのですね。ありがとうございます。 marshmallowのバージョンが違ったので合わせました。 ただ、2つ目のdb.Modelの問題は記載していただいたようにバージョンを全て変えましたが まだ警告が出てしまっています。 自分の環境でこれをインストールしているのですが、どこかおかしなところは ありますか?それとも環境構築でおかしくなっているのでしょうか? Click==7.0 Flask==1.1.1 Flask-JWT==0.3.2 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 PyJWT==1.4.2 PyMySQL==0.9.3 python-dateutil==2.8.0 six==1.12.0 SQLAlchemy==1.3.8 Werkzeug==0.15.6 ちなみに開発環境は mac python 3.7 vs code を使用しています。これも関係あるのでしょうか?
FiroProchainezo

2019/09/06 01:55

python3.7.4をインストールして実行してみましたが、エラー無く実行できました。 実行したコードは、gitから取得したapp.pyおよび、sora36さん記載のPythonコードです。 > Inheriting 'db.Model', which is not a class.Python(inherit-non-class) 私の環境では発生しませんが、上記は何をどうしたら出るのでしょうか? 実行するだけでは出ない?どこかにアクセスする??
sora36

2019/09/06 08:01

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

2019/09/06 08: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の確認も簡単になりますし。
sora36

2019/09/06 09:00

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問