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

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

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

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

SQLite

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

Python

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

Q&A

解決済

2回答

466閲覧

shutil.moveでファイルを移動する操作が、Flaskのルーティングの中で実行するとできない時がある

8960

総合スコア108

Flask

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

SQLite

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

Python

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

0グッド

0クリップ

投稿2022/05/28 00:26

質問

タイトルが分かりにくくてすみません。

①Flaskで作成したWebアプリ上でSQliteのデータベースを作成
②そのデータベースを使用しDashにて分析アプリを作成・閲覧

という手順でデータ分析を行っています。

DBの作成場所と扱いたい場所が異なるので、FlaskアプリでDBを作成された瞬間に.dbファイルを、Dashで作成したファイルがあるディレクトリ(扱いたい場所)に移動するようにしています。

この実行の際に「作成元に.dbがありません」とエラーが起こります。
このエラーですが、規則はわかりませんがたまに成功するときもあります(原因はわかりません)。

また、

import pandas as pd import sqlite3 import glob import shutil import time csv_files = glob.glob("C://Users/●●/*.csv") data_list = [] for file in csv_files: data_list.append(pd.read_csv(file)) df = pd.concat(data_list, axis=0, sort=True) dbname = "Test.db" conn = sqlite3.connect(dbname) cur = conn.cursor() df.to_sql("Test_sheet", conn, if_exists="replace") cur.close() conn.close() time.sleep(1) shutil.move("C://Users/●●●/Test.db", "C://Users/●●●●/Dash/Test.db")

の部分だけコピーして別のファイルで実行すると成功します。

コールバックの中で行うとエラーが起こるのですが、考えられる原因は何でしょうか?

ご教授の程、よろしくお願いします。

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

FileNotFoundError FileNotFoundError: [Errno 2] No such file or directory: 'C://Users/●●●/Test.db'

app.py(該当部以外省略しています)

Python

1from flask import * 2import pandas as pd 3 4app = Flask(__name__) 5 6@app.route('/update', methods=['GET', 'POST']) 7def UPDATE(): 8 if request.method == 'GET': 9 return render_template('Update.html') 10 else: 11 import pandas as pd 12 import sqlite3 13 import glob 14 import shutil 15 import time 16 csv_files = glob.glob("C://Users/●●/*.csv") 17 data_list = [] 18 for file in csv_files: 19 data_list.append(pd.read_csv(file)) 20 df = pd.concat(data_list, axis=0, sort=True) 21 dbname = "Test.db" 22 conn = sqlite3.connect(dbname) 23 cur = conn.cursor() 24 df.to_sql("Test_sheet", conn, if_exists="replace") 25 cur.close() 26 conn.close() 27 time.sleep(1) 28 shutil.move("C://Users/●●●/Test.db", "C://Users/●●●●/Dash/Test.db") 29 return render_template('success.html') 30 31if __name__ == '__main__': 32 app.run(debug=True)

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

python3.9、VSCode

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

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

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

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

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

guest

回答2

0

ベストアンサー

提示コードだとdbファイルはカレントディレクトリに作成されますが
カレントがC://Users/●●●/以外だと当然移動処理は失敗します。
db作成時にフルパスで指定すると解消する可能性があります。

投稿2022/05/28 01:03

can110

総合スコア38266

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

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

8960

2022/05/28 01:32

ご回答いただきありがとうございます。 おかげさまで原因が判明しました!.dbが作成されたディレクトリが違いました。 ①app.pyが完成したのちに、これのショートカットを作成してデスクトップに貼付 ②アプリを使用するときはショートカットからVSCodeを開いて実行 という手順で実行していたため、新しくVSCodeで開いたときにカレントディレクトリが作業ディレクトリから移動してし待っていることが原因でした。 ちなみにdbの作成先は指定できるのでしょうか? 検索しても引っかからずであったため、作成→移動という手段を取っていたのですが。。。
can110

2022/05/28 01:38

> ちなみにdbの作成先は指定できるのでしょうか? はい。よく考えたら最初から~connect('C://Users/●●●●/Dash/Test.db')で作成してよいかと思います。
8960

2022/05/28 01:51

出来ました! ありがとうございました。
guest

0

単にファイルが作成される前に移動しようとしているのでは
ファイルが存在するようになるまで待てばどうでしょう

投稿2022/05/28 00:30

y_waiwai

総合スコア87774

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

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

8960

2022/05/28 00:35

ご回答頂きありがとうございます。 db作成と移動の間、timesleepを挟んでみましたが、変わらずでした。
y_waiwai

2022/05/28 00:40

sleepじゃなく、ファイルの存在チェックをかましましょう ファイル操作ってのは数msでは終わりません
8960

2022/05/28 01:21

チェックをかます →あれば移動、なければエラーを返す ということですかね。 ちなみにエラーが起きた際、ディレクトリを確認してみても.dbが作成すらされていません。。。
y_waiwai

2022/05/28 01:28

作成されてないならまずそれをどうにかしましょうよ 話が変わってます
8960

2022/05/28 01:51

上手くご説明出来ておらずすみません。 おかげさまで解決いたしましたm(__)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問