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

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

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

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

SQLite

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

Python 3.x

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

Q&A

1回答

126閲覧

Flaskでサインアップしようとするとエラーが出る

SAKUMA

総合スコア0

Flask

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

SQLite

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

Python 3.x

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

1グッド

0クリップ

投稿2025/03/15 12:24

実現したいこと

Flaskでサインアップ機能を実装したい
VScodeで最新版のSQLiteという拡張機能のSQLite : Open Databaseという機能でdbファイルを開けない原因と対策を知りたい

発生している問題・分からないこと

サインアップ画面に行くとエラーが出ます
dbファイルにアクセスできないのかもと考えてVScodeで最新版のSQLiteという拡張機能のSQLite : Open Databaseという機能でdbファイルを開こうとしたときにエラーが出て開けませんでした
VScodeのビルトインで開いたときは一部文字化けしています
Pythonのflask_sqlalchemyというライブラリを用いてテーブル定義をしました

エラーメッセージ

error

1サインアップ画面に行こうとしたとき 2Internal Server Error 3The 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. 4dbファイルを開こうとしたとき 5Failed to open database 'ファイルパス': Parse error near line 4: no such column: "table" - should this be a string literal in single-quotes? aster WHERE (type="table" OR type="view") error here ---^

該当のソースコード

Python

1from flask import Flask 2from flask import render_template, request, redirect 3from flask_sqlalchemy import SQLAlchemy 4from flask_login import UserMixin, LoginManager, login_user, logout_user, login_required 5from datetime import datetime 6import pytz 7import os 8from werkzeug.security import generate_password_hash, check_password_hash 9 10app = Flask(__name__) 11app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db' 12app.config['SECRET_KEY'] = os.urandom(24) 13db = SQLAlchemy(app) 14 15login_manager = LoginManager() 16login_manager.init_app(app) 17 18class Post(db.Model): 19 id = db.Column(db.Integer, primary_key=True) 20 title = db.Column(db.String(50), nullable=False) 21 body = db.Column(db.String(300), nullable=False) 22 created_at = db.Column(db.DateTime, nullable=False, 23 default=datetime.now(pytz.timezone('Asia/Tokyo'))) 24 25class User(UserMixin, db.Model): 26 id = db.Column(db.Integer, primary_key=True) 27 username = db.Column(db.String(30), nullable=False, unique=True) 28 password = db.Column(db.String(12)) 29 30@login_manager.user_loader 31def load_user(user_id): 32 return User.query.get(int(user_id)) 33 34@app.route('/', methods=['GET', 'POST']) 35# @login_required 36def index(): 37 if request.method == 'GET': 38 posts =Post.query.all() 39 return render_template('index.html', posts=posts) 40 41@app.route('/signup', methods=['GET', 'POST']) 42def signup(): 43 if request.method == 'POST': 44 username= request.form.get('username') 45 password= request.form.get('password') 46 47 user = User(username=username, password=generate_password_hash(password, method='sha256')) 48 49 db.session.add(user) 50 db.session.commit() 51 return redirect('/login') 52 53 else: 54 return render_template('signup.html') 55 56@app.route('/login', methods=['GET', 'POST']) 57def login(): 58 if request.method == 'POST': 59 username= request.form.get('username') 60 password= request.form.get('password') 61 62 user = User.query.filter_by(username=username).first() 63 64 if check_password_hash(user.password, password): 65 login_user(user) 66 return redirect('/') 67 else: 68 return render_template('login.html') 69 70@app.route('/logout') 71@login_required 72def logout(): 73 logout_user() 74 return redirect('/login') 75 76@app.route('/create', methods=['GET', 'POST']) 77# @login_required 78def create(): 79 if request.method == 'POST': 80 title= request.form.get('title') 81 body= request.form.get('body') 82 83 post = Post(title=title, body=body) 84 85 db.session.add(post) 86 db.session.commit() 87 return redirect('/') 88 89 else: 90 return render_template('create.html') 91 92@app.route('/<int:id>/update', methods=['GET', 'POST']) 93# @login_required 94def update(id): 95 post = Post.query.get(id) 96 if request.method == 'GET': 97 return render_template('update.html', post=post) 98 else: 99 post.title= request.form.get('title') 100 post.body= request.form.get('body') 101 102 db.session.commit() 103 return redirect('/') 104 105@app.route('/<int:id>/delete', methods=['GET']) 106# @login_required 107def delete(id): 108 post = Post.query.get(id) 109 110 db.session.delete(post) 111 db.session.commit() 112 return redirect('/') 113 114テーブル定義をしようとしたとき 115 116$ Python 117>>> from app import app, db 118>>> with app.app_context(): 119    …db.create_all() 120 121

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

dbファイルが開けないのはネットにはダブルクォーテーションが原因みたいな記事があったのですが、少なくとも自分が書いたコードにダブルクォーテーションは使っていません
拡張機能のSQLiteのひとつ前のバージョンを使ってみたのですが効果はありませんでした

補足

特になし

9muna👍を押しています

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

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

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

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

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

guest

回答1

0

質問文のコードを実行してみました。

そのまま実行するとtemplateが無いエラーが出ます。
templateを追加すると、500エラーにはなりましたが、質問文のエラーではなく、以下の部分でエラーになっていました。

py

1 user = User(username=username, password=generate_password_hash(password, method='sha256'))

methodが間違っているようです。
method='pbkdf2:sha256'method='scrypt'
に変更したところ、Userテーブルに登録され、ユーザ名とパスワードのハッシュ値が登録されていました。

とりあえず上記部分を直してみて動作しなかったら、いったんDBファイルを削除して、db.create_all()からやり直してみてはいかがでしょうか?
悩んでいる間に、覚えてない変なことをしているかもしれませんので。

補足

追加したhtmlファイルは、templates/signup.htmltemplates/login.htmlです。

投稿2025/03/18 01:05

FiroProchainezo

総合スコア2443

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.32%

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

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

質問する

関連した質問