実現したいこと
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のひとつ前のバージョンを使ってみたのですが効果はありませんでした
補足
特になし

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。