2022/12/30 05:55
退会w
Q&A
退会済みユーザー
総合スコア0
投稿2022/12/29 03:51
編集2022/12/30 14:55ユーザー名と、パスワードを登録させる処理を
以下で実現いようとしていますが、db.session.commit()
で、どうしても、app.py内で以下のエラーとなってしまいます。
エラーコードを手掛かりに色々ググりましたが、力不足で何かを試すまでにも至りませんでした。
このエラーの原因と解決策を教えて頂ければと思います。
宜しくお願いいたします。
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) テーブル ユーザーにユーザー名という名前の列がありません [SQL: INSERT INTO ユーザー (ユーザー名、パスワード) 値 (?, ?)] [パラメーター: ('1234', 'sha256$J14tUTAPEaUo2kJE$3ea885afbdbd1ab0a4f76ffa4abd7b63caa9a03e338e836b08e36b08e36b08e36b08e3383e33851 ')] (このエラーの背景: https://sqlalche.me/e/14/e3q8)
ちなみに、DBの作成は、pythonの対話モードから以下を実行しております。
>>> from app import app, db >>> with app.app_context(): ... db.create_all() ... >>> exit()
html
1#signup.html 2 3{% extends "base.html" %} 4{% block content %} 5<h1>ユーザー登録</h1> 6<form method="POST"> 7 <label for="">ユーザー名</label> 8 <input type="text" name="username"> 9 <label for="">パスワード</label> 10 <input type="password" name="password"> 11 <input type="submit" value="新規登録"> 12</form> 13{% endblock %}
python
1# app.py 2 3@login_manager.user_loader 4def load_user(user_id): 5 return User.query.get(int(user_id)) 6 7 8# UserMixinクラスと、db.Modelクラスを継承 9class User(UserMixin, db.Model): 10 id = db.Column(db.Integer, primary_key=True) 11 username= db.Column(db.String(30), nullable=False, unique=True) 12 password = db.Column(db.String(12), nullable=False) 13 14# 今回作成 15@app.route("/signup", methods=['GET', 'POST']) 16def signup(): 17 if request.method == 'POST': 18 username = request.form.get('username') 19 password = request.form.get('password') 20 21 # Userクラスに引数の情報を入れ、インスタンス化を行う 22 user = User(username=username, password=generate_password_hash(password, method='sha256')) 23 # インスタンス化した user をDBに追加 24 db.session.add(user) 25 # 変更を保存 26 db.session.commit() 27 28 # signup後は、ログインページへリダイレクト 29 return redirect('/login') 30 else: 31 return render_template('signup.html') 32