Azure SQL Databaseを用いたウェブアプリを作成し、
同じくAzureのWebappにデプロイしました。
デプロイした後1日~2日ほどは正常に動作しますが、
その後key errorをはくようになります。
web app上では動作していない状態でもローカルで
デバッグ、実行すると正常に動作します。
関係ありそうなコードは
python
1# dao.py 2class DbManeger: 3 4 server = '〇〇.database.windows.net' 5 database = '〇〇' 6 username = '〇〇' 7 password = '〇〇' 8 9 driver= '{ODBC Driver 17 for SQL Server}' 10 11 cnxn = pyodbc.connect('DRIVER='+driver+';SERVER=tcp:'+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password) 12 13 cursor = cnxn.cursor() 14 15 select = "SELECT * FROM dbo.users" 16 17 def select_db(self, select): 18 self.cursor.execute(select) 19 rows = self.cursor.fetchall() 20 rows = [list(item) for item in rows] 21 return rows 22 23 def close_db(self): 24 self.cursor.close() 25 self.cnxn.close() 26 27 def execute(self, exe): 28 self.cursor.execute(exe) 29 self.cursor.execute("COMMIT") 30
python
1# app.py 2@app.route('/login', methods=["GET", "POST"]) 3def login(): 4 if(request.method == "POST"): 5 users = config.get_userlist() # ログイン用ユーザー 6 def nested_dict(): return defaultdict(nested_dict) 7 user_check = nested_dict() 8 for i in users.values(): 9 user_check[i.name]["password"] = i.password 10 user_check[i.name]["id"] = i.id 11 user_check[i.name]["data"] = i.data 12 # ユーザーチェック 13 if(request.form["username"] in user_check and request.form["password"] == user_check[request.form["username"]]["password"]): 14 # ユーザーが存在した場合はログイン 15 login_user(users.get(user_check[request.form["username"]]["id"])) 16 session["username"] = request.form["username"] 17 session["password"] = request.form["password"] 18 itemlist = config.ITEM_LIST 19 session["itemlist"] = itemlist[1] 20 21 data_state = user_check[request.form["username"]]["data"] 22 23 session["data_state"] = data_state 24 25 return render_template("index.html", 26 title="〇〇", 27 login_info=login_info_state()) 28 else: 29 return render_template("login.html", msg="パスワードが違います。", 30 title="〇〇", 31 login_info=login_info_state()) 32 else: 33 return render_template("login.html", 34 title="〇〇", 35 login_info=login_info_state())
python
1# config.py 2def get_itemlist(): 3 db_maneger = dao.DbManeger() 4 items = db_maneger.select_db("select * from dbo.hin_list ORDER BY hin_name") 5 items = np.array(items).T.tolist() 6 return items 7 8ITEM_LIST = get_itemlist() 9hin_code = ITEM_LIST[0][0] 10 11db_maneger = DbManeger() 12past_data = db_maneger.select_db(f"SELECT days.date, days.ave_temp, days.EUR_YEN, hin.tanka, hin.PCR FROM dbo.forecast_days AS days INNER JOIN dbo.forecast_{hin_code} AS hin ON days.date = hin.date") 13src_data = pd.DataFrame(past_data, columns=["日付", "平均気温(℃)", "ユーロ/円", "単価", "PCR"]) 14 15datelist = src_data["日付"].to_numpy().tolist() 16FORECAST_PERIOD = f"{datelist[0]}~{datelist[-1]}" 17 18 19class User(UserMixin): 20 def __init__(self, id, name, password, data): 21 self.id = id 22 self.name = name 23 self.password = password 24 self.data = data 25 26 27def get_userlist(): 28 db_maneger = dao.DbManeger() 29 users = db_maneger.select_db("select * from dbo.users") 30 31 userlist = [] 32 33 i = 0 34 for row in users: 35 row.insert(0, i) 36 userlist.append(row) 37 i = i + 1 38 39 userlist = np.array(userlist).T.tolist() 40 41 USERS = {} 42 for i in range(len(userlist[0])): 43 Userr = User(i + 1, userlist[1][i], userlist[2][i], userlist[3][i]) 44 USERS[i + 1] = Userr 45 46 return USERS
エラーは以下の通りです。
File "/tmp/8d967a1d088906d/app.py", line 286, in login
users = config.get_userlist()
File "/tmp/8d967a1d088906d/config.py", line 65, in get_userlist
users = db_maneger.select_db("select * from dbo.users")
File "/tmp/8d967a1d088906d/model/dao.py", line 20, in select_db
self.cursor.execute(select)
pyodbc.OperationalError: ('08S01', '[08S01] [Microsoft][ODBC Driver 17 for SQL Server]Communication link failure (0) (SQLExecDirectW)')
"POST /login HTTP/1.1" 500 290 "https://〇〇.azurewebsites.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36"
2021-09-01T00:21:58.555787350Z key error
ローカル環境ではこのエラーは起きず、デプロイすると発生します。
サブスクリプション:Visual Studio Enterprise – MPN
場所:西日本
App Serviceプラン:B1
なおpython はver3.7.9です。
お力添えを頂けますと幸いです。
以下使用ライブラリ、バージョン等転載いたします。
click==8.0.1
colorama==0.4.4
et-xmlfile==1.1.0
Flask==2.0.1
Flask-Login==0.5.0
importlib-metadata==4.6.3
itsdangerous==2.0.1
Jinja2==3.0.1
joblib==1.0.1
MarkupSafe==2.0.1
numpy==1.21.1
openpyxl==3.0.7
pandas==1.3.1
pyodbc==4.0.32
python-dateutil==2.8.2
pytz==2021.1
scikit-learn==0.24.2
scipy==1.7.1
six==1.16.0
sklearn==0.0
threadpoolctl==2.2.0
typing-extensions==3.10.0.0
Werkzeug==2.0.1
xlrd==2.0.1
zipp==3.5.0
回答1件
あなたの回答
tips
プレビュー