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

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

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

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

Python 3.x

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

Python

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

Q&A

解決済

2回答

6010閲覧

Internal Server Errorの解決方法が知りたい

jurinayuria11

総合スコア14

Flask

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

Python 3.x

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

Python

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

0グッド

0クリップ

投稿2020/07/13 05:31

前提・実現したいこと

初心者です。Python学習講座PythonエンジニアによるPython3学習サイト
(https://www.python.ambitious-engineer.com )で勉強中です。
Flaskで作る簡易分析ツール 4分析処理を作成しました。
以下にアクセスしてタイトル・文字列を入れて送信ボタンをクリックするとエラーが発生せずに参照画面のmockに遷移すると成功だか、エラーが発生してしまう。
http://localhost:5000/create

発生している問題・エラーメッセージ

Internal Server Error The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.

該当のソースコード

Python

1import os 2from flask import Flask, redirect, url_for, render_template, g, request 3import sqlite3 4import models 5 6app = Flask(__name__) 7app.config.from_object(__name__) 8 9app.config.update(dict( 10 DATABASE=os.path.join(app.root_path, 'db.sqlite3'), 11 SECRET_KEY='foo-baa', 12)) 13 14 15# 以下、DB接続関連の関数 16def connect_db(): 17 """ データベス接続に接続します """ 18 con = sqlite3.connect(app.config['DATABASE']) 19 con.row_factory = sqlite3.Row 20 return con 21 22 23def get_db(): 24 """ connectionを取得します """ 25 if not hasattr(g, 'sqlite_db'): 26 g.sqlite_db = connect_db() 27 return g.sqlite_db 28 29 30@app.teardown_appcontext 31def close_db(error): 32 """ db接続をcloseします """ 33 if hasattr(g, 'sqlite_db'): 34 g.sqlite_db.close() 35 36 37# 以下、画面/機能毎の関数 38@app.route('/') 39def index(): 40 """ 一覧画面 """ 41 return render_template('index.html', results={}) 42 43 44@app.route('/create') 45def create(): 46 """ 新規作成画面 """ 47 return render_template('edit.html') 48 49 50@app.route('/analysis', methods=['POST']) 51def analysis(): 52 """ 分析実行処理 """ 53 title = request.form['title'] 54 data = request.form['data'] 55 img = models.create_scatter(data) 56 57 con = get_db 58 59 pk = models.insert(con, title, data, img) 60 return redirect(url_for('view', pk=pk)) 61 62 63@app.route('/delete/<pk>', methods=['POST']) 64def delete(pk): 65 """ 結果削除処理 """ 66 return redirect(url_for('index')) 67 68 69@app.route('/view/<pk>') 70def view(pk): 71 """ 結果参照処理 """ 72 return render_template('view.html', result={}) 73 74 75if __name__ == '__main__': 76 app.run() 77

エラーログ

[2020-07-13 14:10:36,851] ERROR in app: Exception on /analysis [POST] Traceback (most recent call last): File "/Users/opt/anaconda3/lib/python3.7/site-packages/flask/app.py", line 2446, in wsgi_app response = self.full_dispatch_request() File "/Users/opt/anaconda3/lib/python3.7/site-packages/flask/app.py", line 1951, in full_dispatch_request rv = self.handle_user_exception(e) File "/Users/opt/anaconda3/lib/python3.7/site-packages/flask/app.py", line 1820, in handle_user_exception reraise(exc_type, exc_value, tb) File "/Users/opt/anaconda3/lib/python3.7/site-packages/flask/_compat.py", line 39, in reraise raise value File "/Users/opt/anaconda3/lib/python3.7/site-packages/flask/app.py", line 1949, in full_dispatch_request rv = self.dispatch_request() File "/Users/opt/anaconda3/lib/python3.7/site-packages/flask/app.py", line 1935, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "/Users/Desktop/flask_init_sample/run.py", line 59, in analysis pk = models.insert(con, title, data, img) File "/Users/Desktop/flask_init_sample/models.py", line 40, in insert cur = con.cursor() AttributeError: 'function' object has no attribute 'cursor'

AttributeErrorを解決するには、どこから手を付けたらいいのかわかりません。
教えていただけないでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

次の箇所を修正します:

python

1con = get_db

python

1con = get_db()

原因の特定方法

console

1 File "/Users/Desktop/flask_init_sample/models.py", line 40, in insert 2 cur = con.cursor() 3AttributeError: 'function' object has no attribute 'cursor'

このエラーの内容は、
con.cursor() を実行しようとしていますが、
function (関数型) のオブジェクトに cursor という要素はありませんよ」
という指摘です

つまり、con が関数型になっています
これはプログラムした意図と異なっていることでしょう
con はデータベースコネクションのオブジェクトになるつもりで
プログラミングしたはずですね

con を作成した箇所を探してプログラムを遡っていくと、
次の箇所が見つかります:

python

1con = get_db

この書き方は関数を実行せず、
関数自体を変数に代入する記法です

関数 get_db は、
実行するとデータベースコネクションのオブジェクトを返すようなので、
関数 get_db 自体を変数 con 代入するのではなく、
関数 get_db を実行して、返り値を変数 con に代入します

python

1con = get_db()

投稿2020/07/13 05:34

編集2020/07/13 05:46
y_shinoda

総合スコア3272

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

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

jurinayuria11

2020/07/13 05:55

解説までいただきありがとうございました。
guest

0

AttributeError: 'function' object has no attribute 'cursor'

google翻訳
「関数」オブジェクトには属性「cursor」がありません

ってことなんで、

con = get_db

pk = models.insert(con, title, data, img)

con = get_db()
の間違いでしょうか

投稿2020/07/13 05:37

y_waiwai

総合スコア87719

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問