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

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

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

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

SQLite

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

データベース

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

Python

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

Q&A

解決済

2回答

1136閲覧

WEBAPIから、DB Browser for SQliteで作成したテーブルにアクセスしたい

tasojiro

総合スコア16

Flask

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

SQLite

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

データベース

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

Python

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

0グッド

0クリップ

投稿2021/06/06 11:24

前提・実現したいこと

DB Browser for SQliteで作成したテーブルに、Flaskで作成したWEBAPIからアクセスしたい、という事が実現したいことです。

作成したデータベース(sample.sqlite3)は、WEBAPI(main.py)と同じディレクトリに保存されています。

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

以下が、エラーメッセージです。

File "C:\Users\tasoj\Desktop\Web_API_Test\main.py", line 27, in index cur = db.execute("select * from mydata") sqlite3.OperationalError: no such table: mydata

該当のソースコード

Python

1from flask import Flask, app, jsonify, g 2import sqlite3 3 4app = Flask(__name__) 5#JSONでの日本語の文字化け阻止 6app.config['JSON_AS_ASCII'] = False 7 8#DBに接続 9def get_db(): 10 if 'db' not in g: 11 g.db = sqlite3.connect("sample.sqlite3") 12 return g.db 13#DBとの接続を終了 14def close_db(e=None): 15 db = g.pop('db', None) 16 if db is not None: 17 db.close() 18 19@app.route('/', methods=["GET"]) 20def index(): 21 mydata = [] 22 db = get_db() 23 cur = db.execute("select * from mydata") 24 mydata = cur.fetchall() 25 return jsonify(mydata)

試したこと

SQLiteで作成したテーブルは、次のように作成しました。
スキーマ

CREATE TABLE "mydata" ( "id" INTEGER, "name" TEXT NOT NULL, "tag" TEXT, "message" TEXT, PRIMARY KEY("id" AUTOINCREMENT) )

どのようにしたら、テーブルにアクセスできるようになるのかご教授いただければ幸いです。

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

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

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

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

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

YT0014

2021/06/06 12:55

connect()の引数をフルパスにしたら、どうなりますか? また、他の場所に、空のsample.sqlite3ができていないか、検索してみては?
tasojiro

2021/06/06 13:14

確認したところ、C直下に新たに「sample.sqlite3」が作成されていました。 旧ファイルを削除し実行してみたところ、正常に動作しました。 本当にありがとうございました。
guest

回答2

0

自己解決

YT0014様からの修正依頼の案にて、解決しました。

予め任意のフォルダで作成していても、自動でファイルが作成されるようです。
任意のフォルダから行いたい場合は、フルパスでの実行が必要に感じました。

投稿2021/06/06 13:17

tasojiro

総合スコア16

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

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

0

あくまで可能性ですが
・sample.sqlite3というファイル名や、ファイルパスに誤りはないか確認してください。
・sample.sqlite3内に確実にmydataというテーブルが作成されているか確認して下さい。
・存在しているsample.sqlite3のファイルサイズが0バイトでないことを確認してください。
仮に、当初sample.sqlite3というファイルが存在していない状態で、上記のコード(厳密には、app.run()を追加したもの)を実行した場合、
「sqlite3.OperationalError: no such table: mydata」のエラーメッセージが表示されるとともに
0バイトの「sample.sqlite3」が作成されます。

その後も0バイトの「sample.sqlite3」を参照するため同様のエラーが出ることになります。
(最初に正しい「sample.sqlite3」が存在していれば、0バイトの「sample.sqlite3」は作成されず、エラーメッセージも出ないはずです)

投稿2021/06/06 11:45

編集2021/06/06 11:47
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tasojiro

2021/06/06 11:57

回答ありがとうございます。 >sample.sqlite3というファイル名や、ファイルパスに誤りはないか確認してください。 事前に調べていた記事にもスペルミスによるエラーが原因として挙げられていたので確認しました。 もう一度確認しましたが、やはりスペルに問題は無いようでした。 >sample.sqlite3内に確実にmydataというテーブルが作成されているか確認して下さい。 「sample.sqlite3」を「プログラムから開く」で「DB Browser for SQLite」を選択し確認したところ、 テーブルに「mydata」と「sqlite_sequence」が確認できました。 作成はされいているようです。 >存在しているsample.sqlite3のファイルサイズが0バイトでないことを確認してください。 エクスプローラーで確認したところサイズは「16KB」となっていました。 よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問