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

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回答

6209閲覧

Flask-SQLAlchemyでDBにdataの追加ができない

yuto36

総合スコア16

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/06/21 03:42

Flaskを学習して間もない初心者です。
よろしくお願いします。

今やりたい事は
Flask-SQLAlchemyでemployeeの情報を追加する際に
追加できないので教えて欲しいです。
db.session.add()
db.session.commit()
で追加DBに反映できるのはわかりましたが、
実際にDBには反映されていないです。

app.py

from flask import Flask, jsonify, request from flask_sqlalchemy import SQLAlchemy from sqlalchemy.orm import Session import sqlalchemy.orm app = Flask(__name__) app.config["SQLALCHEMY_DATABASE_URI"] = 'mysql://{user}:{password}@{host}/sample_db?charset=utf8' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) @app.route('/employee', methods=['POST']) def add_employee_info(): employee = Employee() employee.id = 'id', employee.name = 'name', employee.mail = 'mail', employee.telephone = 'telephone' employee = Employee() db.session.add(employee) db.session.commit() return json.dumps(employee), 201

models.py

from datetime import datetime from database import db id = db.Column(db.Integer(), nullable=False, primary_key=True, autoincrement=True, unique=True, comment="ID") name = db.Column(db.String(255), nullable=False) mail = db.Column(db.String(255), nullable=True) telephone = db.Column(db.String(13), nullable=True)

現在出ているエラー

sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (1048, "Column 'name' cannot be null")
init_app() missing 1 required positional argument: 'app'

色々調べましたが、上手くいきません。
どなたか解決できる方、ご教授お願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

これが正しいかはわからないのですが、試す価値はあります。

◯ 訂正箇所1

"Column 'name' cannot be null"

ということは 'name' は「空っぽじゃダメ」ですよと言われています。

python

1 employee = Employee() # <--- これ name, telephone, mail が空です。 2 db.session.add(employee) 3 db.session.commit()

と、言うことでコメントアウトします。

python

1 # employee = Employee() 2 db.session.add(employee) 3 db.session.commit()

◯ 訂正箇所2

missing 1 required positional argument は頻出のエラーです。

init_app() missing 1 required positional argument: 'app'

「引数が足りませんよ」と言われています。

db.init_app()

と、言うことで引数を追加します。

db.init_app(app)

Flask には以下のような3階層のグローバル変数があります。よくコンテクストと言われたりします。2階層目の app を初期化していると言う意味合いになります。

flask.g > flask.current_app > flask.request

◯ 訂正箇所3

あと、かなり高度な間違いをしている箇所があります。

python

1 employee.id = 'id', 2 employee.name = 'name', 3 employee.mail = 'mail',

行末の , は外します。

python

1 employee.id = 'id' 2 employee.name = 'name' 3 employee.mail = 'mail'

, をいれるとタプルになります。

>>> 1 1 >>> 1, (1,) >>>

投稿2019/06/22 00:43

編集2019/06/22 00:48
nico25

総合スコア830

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

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

yuto36

2019/08/23 08:47 編集

返信遅くなってしまいました。 ありがとうございました。うまく動きました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問