umiyamakawasorasakura
@umiyamakawasorasakura

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

Flaskアプリで 'NoneType' object has no attribute 'cursor' エラーが発生します(PythonAnywhere使用)

解決したいこと

FlaskアプリでMySQLに接続し、データベースの操作(INSERTやSELECT)が正常に行えるようにしたいです。しかし、現在 'NoneType' object has no attribute 'cursor' というエラーが発生しており、正しく接続できていません。この問題を解決して、正常にデータベースにアクセスできるようにしたいです。

発生している問題・エラー

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

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

from flask import Flask, render_template, request, redirect
from flask_mysqldb import MySQL
from config import Config

app = Flask(__name__)
app.config.from_object(Config)
mysql = MySQL(app)

@app.route('/', methods=['GET', 'POST'])
def index():
    if mysql.connection is None:
        return "Database connection failed"
    
    if request.method == 'POST':
        content = request.form['content']
        try:
            cur = mysql.connection.cursor()
            cur.execute("INSERT INTO posts (content) VALUES (%s)", (content,))
            mysql.connection.commit()
            cur.close()
        except Exception as e:
            return f"An error occurred: {e}"
        return redirect('/')
    
    try:
        cur = mysql.connection.cursor()
        cur.execute("SELECT * FROM posts ORDER BY created_at DESC")
        posts = cur.fetchall()
        cur.close()
    except Exception as e:
        return f"An error occurred: {e}"
    
    return render_template('index.html', posts=posts)

@app.route('/test_db')
def test_db():
    try:
        cur = mysql.connection.cursor()
        cur.execute("SELECT 1")
        cur.close()
        return "Database connection successful"
    except Exception as e:
        return f"Database connection failed: {e}"

if __name__ == '__main__':
    app.run(debug=True)
このコードでMySQLデータベースに接続しデータの取得や挿入を行おうとしていますがデータベース接続が NoneType となりカーソルオブジェクトの操作に失敗しています

自分で試したこと

試したこと:
config.py の設定は以下の通りです:

MYSQL_HOST: slothvillage.mysql.pythonanywhere-services.com
MYSQL_USER: slothvillage
MYSQL_PASSWORD: 正しいパスワードを使用しています
MYSQL_DB: slothvillage$default
MYSQL_CURSORCLASS: 'DictCursor'
/test_db というルートを追加してデータベース接続をテストしましたが、「Database connection failed」というメッセージが表示されます。

その他:
MySQLに手動で接続する際は、正しいパスワードを入力して接続できています。
app.py と config.py は同じディレクトリに配置されており、ディレクトリ構造には問題ないと思われます。
ディレクトリの構造は以下の通りです:
my_flask_app/
app.py
config.py
templates/
static/
どなたか、何が原因でこのエラーが発生しているのか、また解決方法についてアドバイスをいただけると助かります。よろしくお願いします。

0

2Answer

Your answer might help someone💌