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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

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

Q&A

解決済

1回答

1810閲覧

python sqlite3.OperationalError table user has no column named user_name

jaogjig

総合スコア21

SQLite

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Python

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

0グッド

0クリップ

投稿2021/12/28 12:07

編集2021/12/28 17:06

前提・実現したいこと

財務諸表の分析を自動化するサイトを作っています。
signup機能を作り終わりました。そこで、ユーザー名とパスワードの両方を”123”入れて新規登録ボタンを押したところ以下のエラーが発生しました。

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

エラーメッセージ

qlalchemy.exc.OperationalError: (sqlite3.OperationalError) table user has no column named user_name
[SQL: INSERT INTO user (user_name, password) VALUES (?, ?)]
[parameters: ('123', 'sHa256$LQTjrzGilIa4Y5ax$dd7fb55989f4e6beaeb151b7599b24c06694dd10c83fd1fd61172ce6a4fbba30')]
(Background on this error at: https://sqlalche.me/e/14/e3q8)
となっています。

該当コード

signup

app

1.py 2 from re import L 3import os 4from flask import Flask,render_template,request,redirect 5import pandas as pd 6from flask_sqlalchemy import SQLAlchemy 7from flask_login import UserMixin, LoginManager,login_user,logout_user,login_required 8from werkzeug.security import generate_password_hash ,check_password_hash 9app = Flask(__name__) 10app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///search.db' 11app.config['SECRET_KEY']= os.urandom(24) 12db = SQLAlchemy(app) 13Login_manager=LoginManager() 14Login_manager.init_app(app) 15 16 17class User(UserMixin,db.Model): 18 id = db.Column(db.Integer, primary_key=True) 19 user_name = db.Column(db.String(20), unique=True, nullable=False) 20 password = db.Column(db.String(20), unique=True, nullable=False) 21def __init__(self,user_name=None, password=None): 22 self.user_name =user_name 23 self.password=password 24 25@Login_manager.user_loader 26def load_user(user_id): 27 return User.query.get(int(user_id)) 28 29 30 31@app.route("/signup",methods=["GET","POST"]) 32def signup(): 33 if request.method == 'POST': 34 user_name= request.form.get('user_name') 35 password= request.form.get('password') 36 user= User(user_name=user_name, password=generate_password_hash(password, method='sHa256')) 37 db.session.add(user) 38 db.session.commit() 39 return redirect('/') 40 else: 41 return render_template("signup.html") 42 43@app.route("/login",methods=["GET","POSt"]) 44def login(): 45 if request.method == 'POST': 46 user_name= request.form.get('user_name') 47 password= request.form.get('password') 48 user=User.query.filter_by(user_name=user_name).first() 49 if check_password_hash(user.password,password): 50 login_user(user) #間違っていた時の処理は課題 51 return redirect('/') 52 else: 53 return render_template("login.html") 54@app.route('/logout') 55@login_required #ログインしてないとアクセスできません文 56def logout(): 57 logout_user() 58 return redirect('/login') 59

search

1.db 2id INTEGER NOT NULL, 3 username VARCHAR(20) NOT NULL, 4 PRIMARY KEY (id), 5 UNIQUE (username)

###試したこと
https://qiita.com/414_cherry/items/b34f6c6db087e2e35a51
を参考にして誤字があるかチェックしましたが、ダメでした。
模写した動画:https://www.youtube.com/watch?v=VtJ-fGm4gNg

補足情報(FW/ツールのバージョンなど)

ファイルとディレクトリの配置
pycache
|-app.cpython-39.pyc
images
|-2.png
static
|-design.css
templates
|-howto.html
|-index.html
|-searched.html
|-table.html
|-signup.html
|-login.html

app.py
search.db
クレスコ財務データ(自動保存済み).csv

FW:flask
言語:Python3.9.7
pandasダウンロード済み

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

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

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

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

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

Orlofsky

2021/12/28 12:21

質問に user テーブルのCREATE TABLE文も追記してください。
Supernove

2021/12/28 12:54

「table user has no column named user_name」とありますが、CREATE文というよりもマイグレーション(テーブルの作成やカラムの設定)をしていますか?
jaogjig

2021/12/28 13:03

回答ありがとうございます。user テーブルのCREATE TABLE文とはseach.dbの中のコードでいいですか
jaogjig

2021/12/28 13:05

Supernoveさん:回答ありがとうございます。マイグレーションしてないです。動画を見て作ったところに書いてなかったので
jaogjig

2021/12/28 13:06

調べてみます
Supernove

2021/12/28 13:15

なるほど、何もしてないのにアプリケ=ションを立ち上げるとテーブルが存在しないため、エラーになります。 SQLAlchemyを使っているのであれば、CREATE TABLE文は用意する必要がありません。 あと、動画を見て作ったのであればその動画のリンクを追加してください。
jaogjig

2021/12/29 05:39

作り直したらできました。ありがとうございました。
guest

回答1

0

ベストアンサー

マイグレーションをしていないようなので、app.pyと同じディレクトリ上で別途以下のPythonコードを用意するか、対話モードで実行してみてください

from app import db db.create_all()

投稿2021/12/28 13:19

編集2021/12/28 18:33
Supernove

総合スコア1154

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

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

jaogjig

2021/12/28 17:30

このコードは動画では対話モードのところでやっています。 app.py上でやるとImportError: cannot import name 'db' from partially initialized module 'app' (most likely due to a circular import)と出てきました。
jaogjig

2021/12/28 17:46

このように入れました。 from re import L import os from flask import Flask,render_template,request,redirect import pandas as pd from app import db db.create_all() from flask_sqlalchemy import SQLAlchemy
Supernove

2021/12/28 18:35 編集

すみません、言い方が悪かったですね。app.pyに入れたところでappモジュールの参照先がないので、エラーになります。 対話モードを知っているなら参照先の動画の通りに実行してもらえばマイグレーションができると思います。(動画の中ではマイグレーションという言葉は一言も使っていませんが)
jaogjig

2021/12/29 02:03

動画通りに実行してもこのエラーが消えないです。
Supernove

2021/12/29 03:53

自分も同じコードでユーザー名とパスワードの両方を”123”入れて試しましたが、問題なく登録・ログイン出来ました。 たぶんデーターベースに何かしらの問題があるかもしれないのでsearch.dbを削除して作り直してみたらいかがでしょうか?
jaogjig

2021/12/29 05:01

search.dbを消そうとするとerror:EBUSY:resource busy or locked,unlinkと出ました。検索をかけてみましたが、これの処理をどうすればいいかわかりません。わかりますか
jaogjig

2021/12/29 05:15

違う名前にすることで解決しましたがまだ同じエラーが出ています。
jaogjig

2021/12/29 05:40

作り直したらできました。ありがとうございます。
Supernove

2021/12/29 06:17 編集

良かったです!結局この問題は解決済みで良かったですか? 解決済みなら、受付中状態で放置せずに解決済みとしてこの回答をベストアンサーにしていただきたいです
jaogjig

2021/12/30 05:12

忘れてました。回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問