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

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

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

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1493閲覧

python flask投稿エラー(IntegrityError)について

退会済みユーザー

退会済みユーザー

総合スコア0

Flask

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

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/12/18 05:41

編集2022/12/19 12:18

以下の様に、POSTで投稿を行う処理を実装しましたが、
どうしても、IntegrityErrorが発生してしまい、解決できな状況です。

エラー状況をデバッグログ等から調べてみると、
titleやbodyに値を入れていないと判定され、エラーとなっているようです。
しかし、以下の画像の様に、titleやbodyに値を入れて「新規投稿」ボタンを押しております。

何が間違っているのかも分からず困っております。
解決方法をご教示いただければと思います。

本日(12/19)環境を再構築し、再度実行してみましたが、IntegrityErrorが改善されません。
エラー内容を再調査してみると、titleとbodyに値が入っていないためエラーとなっているようです。
POST投稿時、title、bodyに値は入れております。
何が悪悪いのか、本当に分からない状況です。

python

1# app.py 2 3from flask import Flask 4from flask import render_template, request, redirect 5from flask_sqlalchemy import SQLAlchemy 6from datetime import datetime 7import pytz 8 9app = Flask(__name__) 10app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///blog.db" 11db = SQLAlchemy(app) 12 13class Post(db.Model): 14 id = db.Column(db.Integer, primary_key=True) 15 title= db.Column(db.String(50), nullable=False) 16 body = db.Column(db.String(300), nullable=False) 17 created_at = db.Column(db.DateTime, nullable=False, 18 default=datetime.now(pytz.timezone('Asia/Tokyo'))) 19 20@app.route("/") 21def hello(): 22 return render_template('index.html') 23 24 25@app.route("/create", methods=['GET', 'POST']) 26def create(): 27 if request.method == 'POST': 28 title = request.form.get('title') 29 body = request.form.get('body') 30 31 post = Post(title=title, body=body) 32 33 db.session.add(post) 34 # 変更を保存 35 db.session.commit() 36 37 return redirect('/') 38 else: 39 return render_template('create.html')
<!-- base.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <!-- ここに、HTMLの共通化が埋め込まれる --> {% block content %} {% endblock %} </body> </html>

html

1<!-- create.html --> 2 3{% extends "base.html" %} 4{% block content %} 5<h1>新規登録</h1> 6<form method="Post"> 7 <label for="title">タイトル</label> 8 <input type="text" name="=title"> 9 <label for="body">内容</label> 10 <input type="text" name="=body"> 11 <input type="submit" value="新規登録"> 12</form> 13{% endblock %}

html

1<!-- index.html --> 2 3{% extends "base.html" %} 4{% block content %} 5<h1>ブログアプリケーション</h1> 6<!-- ボタン作成 --> 7<a href="/create" role="button">新規作成画面</a> 8<article> 9 <h2>記事1</h2> 10 <p>作成日時: 2022/12/17 10:00</p> 11 <p>記事1の内容</p> 12</article> 13<article> 14 <h2>記事2</h2> 15 <p>作成日時: 2022/12/17 11:00</p> 16 <p>記事2の内容</p> 17</article> 18{% endblock %}

イメージ説明
イメージ説明

デバッグログ

127.0.0.1 - - [18/Dec/2022 14:52:48] "POST /create HTTP/1.1" 500 - Traceback (most recent call last): File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1900, in _execute_context self.dialect.do_execute( File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\engine\default.py", line 736, in do_execute cursor.execute(statement, parameters) sqlite3.IntegrityError: NOT NULL constraint failed: post.title The above exception was the direct cause of the following exception: Traceback (most recent call last): File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\flask\app.py", line 2548, in __call__ return self.wsgi_app(environ, start_response) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\flask\app.py", line 2528, in wsgi_app response = self.handle_exception(e) ^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\flask\app.py", line 2525, in wsgi_app response = self.full_dispatch_request() ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\flask\app.py", line 1822, in full_dispatch_request rv = self.handle_user_exception(e) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\flask\app.py", line 1820, in full_dispatch_request rv = self.dispatch_request() ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\flask\app.py", line 1796, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\PC-Work\dockerenv\pyDir\myproject\app.py", line 33, in create db.session.commit() File "<string>", line 2, in commit File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\orm\session.py", line 1451, in commit self._transaction.commit(_to_root=self.future) File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\orm\session.py", line 829, in commit self._prepare_impl() File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\orm\session.py", line 808, in _prepare_impl self.session.flush() File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\orm\session.py", line 3444, in flush self._flush(objects) File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\orm\session.py", line 3583, in _flush with util.safe_reraise(): File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\util\langhelpers.py", line 70, in __exit__ compat.raise_( File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\util\compat.py", line 211, in raise_ raise exception File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\orm\session.py", line 3544, in _flush flush_context.execute() File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\orm\unitofwork.py", line 456, in execute rec.execute(self) File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\orm\unitofwork.py", line 630, in execute util.preloaded.orm_persistence.save_obj( File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\orm\persistence.py", line 245, in save_obj _emit_insert_statements( File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\orm\persistence.py", line 1238, in _emit_insert_statements result = connection._execute_20( ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1705, in _execute_20 return meth(self, args_10style, kwargs_10style, execution_options) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\sql\elements.py", line 334, in _execute_on_connection return connection._execute_clauseelement( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1572, in _execute_clauseelement ret = self._execute_context( ^^^^^^^^^^^^^^^^^^^^^^ File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1943, in _execute_context self._handle_dbapi_exception( File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 2124, in _handle_dbapi_exception util.raise_( File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\util\compat.py", line 211, in raise_ raise exception File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\engine\base.py", line 1900, in _execute_context self.dialect.do_execute( File "C:\PC-Work\dockerenv\pyDir\myproject\.venv\Lib\site-packages\sqlalchemy\engine\default.py", line 736, in do_execute cursor.execute(statement, parameters) sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: post.title [SQL: INSERT INTO post (title, body, created_at) VALUES (?, ?, ?)] [parameters: (None, None, '2022-12-18 14:50:58.409335')] (Background on this error at: https://sqlalche.me/e/14/gkpj) 127.0.0.1 - - [18/Dec/2022 14:52:48] "GET /create?__debugger__=yes&cmd=resource&f=style.css HTTP/1.1" 304 - 127.0.0.1 - - [18/Dec/2022 14:52:48] "GET /create?__debugger__=yes&cmd=resource&f=debugger.js HTTP/1.1" 304 - 127.0.0.1 - - [18/Dec/2022 14:52:48] "GET /create?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 304 - 127.0.0.1 - - [18/Dec/2022 14:52:48] "GET /create?__debugger__=yes&cmd=resource&f=console.png HTTP/1.1" 304 -

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラー文に以下の記述があります。

text

1sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: post.title 2[SQL: INSERT INTO post (title, body, created_at) VALUES (?, ?, ?)] 3[parameters: (None, None, '2022-12-18 14:50:58.409335')]

title, bodyに入れようとしている値がNone, Noneであるようなので、formから正しく値が取れていないのではないかと思います。

html

1 <input type="text" name="=title"> 2 <input type="text" name="=body">

該当フォームを調べると、nameに=が入っており、名前がおかしいです。
name="title"name="body"なのでは?

投稿2022/12/19 13:51

FiroProchainezo

総合スコア2402

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問