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

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

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

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

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

Q&A

0回答

340閲覧

Python SQLite3で作ったDBをwebアプリケーションで使用した際に出るエラーについて

masa221

総合スコア4

SQLite

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

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

Python

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

0グッド

0クリップ

投稿2018/07/25 14:16

編集2022/01/12 10:55

イメージ説明### 前提・実現したいこと

Pythonを使用して簡単なwebアプリケーションを作っています。
今作っているのは電車検索システムでSQLite3で書いたDBからデータを引っ張ってきて、ユーザが求めたものを返すアプリケーションを作ってます。
上記に掲載されているのが、データベースの中身になっています。

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

発生してるエラーは存在するはずのテーブルが存在しないといわれることです。
IDLEで起動すると普通に求めたい結果が出てくるのですが、webで実行しようとするとこのエラーが出てしまいます。

22 DisS = 0 23 => 24 cur.execute('SELECT * FROM trainData') 25 trainLis = cur.fetchall() 26 cur = <sqlite3.Cursor object>, cur.execute = <built-in method execute of sqlite3.Cursor object> OperationalError: no such table: trainData args = ('no such table: trainData',) with_traceback = <built-in method with_traceback of OperationalError object>

該当のソースコード

Python

1import cgi 2import sqlite3 3import math 4form=cgi.FieldStorage() 5import cgitb 6cgitb.enable() 7 8con = sqlite3.connect("chuo_all.sqlite3") 9cur = con.cursor() 10 11v_from = form.getvalue('From', '0') 12v_to = form.getvalue('To', '0') 13v_n = form.getvalue('np', '0') 14v_PassType=form.getvalue('PassType','0') 15np = int(v_n) 16PassType=int(v_PassType) 17 18 19datA = 0 20datD = 0 21timeR = 0 22DisS = 0 23 24cur.execute('SELECT * FROM trainData') 25trainLis = cur.fetchall() 26 27cur.execute('SELECT Departure,Arrival,Times From trainData') 28station = cur.fetchall() 29print(station) 30graph = [[0 for i in range(99)] for j in range(99)] 31name = [] 32i = 0 33 34for tr in trainLis: 35 if not (tr[1] in name): 36 name.append(tr[1]) 37 i = i + 1 38 if not (tr[2] in name): 39 name.append(tr[2]) 40 i = i + 1 41 graph[name.index(tr[1])][name.index(tr[2])] = float(tr[3]) 42 graph[name.index(tr[2])][name.index(tr[1])] = float(tr[3]) 43 44 45print(name) 46 47 48 49#ここからダイクストラ法 50def get_path(start, goal, prev): 51 path = [] 52 now = goal 53 path.append(now) 54 while True: 55 path.append(prev[now]) 56 if prev[now] == start: 57 break 58 now = prev[now] 59 path.reverse() 60 return path 61 62def Dikstra(G, start, goal): 63 MAX_VAL = math.inf 64 g_size = len(G) 65 v = [False] * g_size 66 cost = [MAX_VAL] * g_size 67 prev = [None] * g_size 68 cost[start] = 0 69 prev[start] = start 70 now = start 71 while True: 72 min = math.inf 73 next = -1 74 v[now] = True 75 for i in range(g_size): 76 if v[i]: 77 continue 78 if G[now][i]: 79 tmp_cost = G[now][i] + cost[now] 80 if cost[i] > tmp_cost: 81 cost[i] = tmp_cost 82 prev[i] = now 83 if min > cost[i]: 84 min = cost[i] 85 next = i 86 if next == -1: break 87 now = next 88 return [get_path(start, goal, prev), cost[goal]] 89 90dis = 0 91a = 0 92for x in name: 93 if x == v_from: 94 dis = a 95 break 96 a = a + 1 97 98arr = 0 99b = 0 100 101for y in name: 102 if y == v_to: 103 arr = b 104 break 105 b = b + 1 106 107namelis=[] 108timeSum = 0 109count = 0 110 111 112path, distance = Dikstra(graph, dis, arr) 113for x in path: 114 count = count + 1 115 namelis.append(name[x]) 116 print(name[x] + " <- ", end = " ") 117print("\n") 118print("distance:{}km".format(distance)) 119 120i = 0 121while i <= count-2: 122 for z in station: 123 if namelis[i] == z[0] and namelis[i+1] == z[1]: 124 timeSum = timeSum + z[2] 125 elif namelis[i] == z[1] and namelis[i+1] == z[0]: 126 timeSum = timeSum + z[2] 127 i = i + 1 128print(timeSum) 129 130Fare_1p = 0 131 132cur.execute('SELECT * From trainFare') 133fareData = cur.fetchall() 134for fare in fareData: 135 if fare[0] <= distance and fare[1] > distance: 136 if PassType == 0: 137 Fare_1p = fare[2] 138 elif PassType == 1: 139 Fare_1p = fare[3] 140 else: 141 pass 142 143print(Fare_1p) 144Fare_Sum = Fare_1p * np 145 146 147 148template =""" 149<html> 150<head> 151 <meta charset="shift-jis"> 152 <meta name="Content-Style-Type" content="text/css"> 153 <title> 運賃計算 </title> 154</head> 155<body> 156 <form method="GET" action="/cgi-bin/R02/test.py"> 157 <p> {Fare_1p}円/1人</p> 158 <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;×{np}</p> 159 <hr style="width:300px; margin-left:0"> 160 <p style="font-size: 2.0em; font-weight: bold;"> 合計&nbsp;&nbsp;{Fare_Sum}円 </p> 161 <p 所要時間&nbsp;{timeSum}分 </p> 162 <p> 出発: <input type="text" name="From" value="{From}"> </p> 163 <p> 到着: <input type="text" name="To" value="{To}"> </p> 164 <p> 人数: <input type="text" name="np" value="{np}"> </p> 165 <p> 166 <input type="checkbox" name="PassType" value=0 checked="checked">切符 167 <input type="checkbox" name="PassType" value=1>IC 168 </p> 169 <p><input type="submit"></p> 170</body></html> 171""" 172result = template.format(From = v_from, To =v_to, Fare_1p = Fare_1p, np = np, 173 Fare_Sum = Fare_Sum, timeSum = timeSum) 174print("Content-type: text/html\n") 175print(result

試したこと

書き方を少し変えてみるなどをしたのですが、ダメでした...

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

umyu

2018/07/25 14:29

見ているデータベースファイルが違うとかいろいろ原因が考えられますが、まずselect * from sqlite_master を実行してテーブル名を確認してみてくださいな。
masa221

2018/07/25 15:16

返信ありがとうございます。sqlite_masterを実行してみたんですが、テーブル名は同じでした。Pythonで実行すると普通に結果が出てくるのですが、webで起動するとこのエラーが出てしまいます。
t_obara

2018/07/26 04:09

umyuさんがご指摘されているように、chuo_all.sqlite3は同じものを参照しているのですか?パス名が付与されていないので想定外のファイルを参照している可能性もあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問