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

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

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

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

Python 3.x

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

解決済

1回答

6155閲覧

sqlalchemyでのテーブル作成

akiraarika932

総合スコア11

Flask

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

Python 3.x

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

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

0グッド

0クリップ

投稿2019/05/22 10:42

現在sqlalchemyを用いてテーブル作成を行おうとしています。
以下のサイトを写経して勉強を行っていたのですが、エラーメッセージで詰まってしまいました。
app.pyにモデルの基底クラスを記述し、テーブル作成を行おうとしたのですが、sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file (Background on this error at: http://sqlalche.me/e/e3q8)
というエラーが出力されうまく出来ませんでした。
エラーメッセージのurlを調べてみるとDBAPIエラーだと記載されており、理解が出来ませんでした。
どうすればテーブル作成ができるのかを教えて下さい。
よろしくおねがいします。

環境
ubuntu 18.10
Flask 1.0.2
Python 3.7.2

app.py

1rom flask import Flask, render_template, redirect, request 2from todo import ToDoList 3from flask_sqlalchemy import SQLAlchemy 4 5app = Flask(__name__) 6app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///db/sample.db" 7db = SQLAlchemy(app) 8 9todolist = ToDoList() 10 11class ToDoItem(db.Model): 12 __tablename__ = "todoitems" 13 item_id=db.Column(db.Integer, primary_key=True) 14 title=db.Column(db.String(100), nullable=False) 15 done=db.Column(db.Boolean,nullable=False,default=False) 16 17@app.route("/") 18def show_todolist(): 19 return render_template("showtodo.html", todolist=todolist.get_all()) 20 21@app.route("/additem", methods=["POST"]) 22def add_item(): 23 title=request.form["title"] 24 if not title: 25 return redirect("/") 26 27 todolist.add(title) 28 return redirect("/") 29 30@app.route("/deleteitem/<int:item_id>") 31def delete_todoitem(item_id): 32 todolist.delete(item_id) 33 return redirect("/") 34 35@app.route("/updatedone/<int:item_id>") 36def update_todoitemdone(item_id): 37 todolist.update(item_id) 38 return redirect("/") 39 40@app.route("/deletealldoneitems") 41def delete_alldoneitems(): 42 todolist.delete_doneitem() 43 return redirect("/") 44 45if __name__ == "__main__": 46 app.run(port=8000, debug=True) 47

参考サイト
https://www.atmarkit.co.jp/ait/articles/1808/07/news029.html

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

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

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

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

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

guest

回答1

0

ベストアンサー

参考にされているページに書かれていますが、

ここでは、「sqlite:///db/sample.db」としているが、これはSQLiteを使用する例となる。これは「プロジェクトフォルダにあるdbサブフォルダの下にあるsample.dbファイル」をデータベースとして利用することを意味する。

db/sample.db というファイルを作ろうとしたけど db ディレクトリが存在しないのでファイルが作れずエラーになっていると思います。

db ディレクトリを作成するか、あるいは、URIを sqlite:///sample.db に変えるかのいずれかの方法を試してみてください。

投稿2019/05/22 13:14

krtx

総合スコア121

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

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

akiraarika932

2019/05/23 01:28

うまくテーブルを作ることができました。 教えていただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問