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

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

ただいまの
回答率

90.52%

  • Python

    7953questions

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

  • Webサイト

    1076questions

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

  • SQLite

    622questions

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

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

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 164

masa221

score 0

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

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>

 該当のソースコード

import cgi
import sqlite3
import math
form=cgi.FieldStorage()
import cgitb
cgitb.enable()

con = sqlite3.connect("chuo_all.sqlite3")
cur = con.cursor()

v_from = form.getvalue('From', '0')
v_to = form.getvalue('To', '0')
v_n = form.getvalue('np', '0')
v_PassType=form.getvalue('PassType','0')
np = int(v_n)
PassType=int(v_PassType)


datA = 0
datD = 0
timeR = 0
DisS = 0

cur.execute('SELECT * FROM trainData')
trainLis = cur.fetchall()

cur.execute('SELECT Departure,Arrival,Times From trainData')
station = cur.fetchall()
print(station)
graph = [[0 for i in range(99)] for j in range(99)]
name = []
i = 0

for tr in trainLis:
    if not (tr[1] in name):
        name.append(tr[1])
        i = i + 1
    if not (tr[2] in name):
        name.append(tr[2])
        i = i + 1
    graph[name.index(tr[1])][name.index(tr[2])] = float(tr[3])
    graph[name.index(tr[2])][name.index(tr[1])] = float(tr[3])


print(name)



#ここからダイクストラ法
def get_path(start, goal, prev):
    path = []
    now = goal
    path.append(now)
    while True:
        path.append(prev[now])
        if prev[now] == start:
            break
        now = prev[now]
    path.reverse()
    return path

def Dikstra(G, start, goal):
    MAX_VAL = math.inf
    g_size = len(G)
    v = [False] * g_size
    cost = [MAX_VAL] * g_size
    prev = [None] * g_size
    cost[start] = 0
    prev[start] = start
    now = start
    while True:
        min = math.inf
        next = -1
        v[now] = True
        for i in range(g_size):
            if v[i]:
                continue
            if G[now][i]:
                tmp_cost = G[now][i] + cost[now]
                if cost[i] > tmp_cost:
                    cost[i] = tmp_cost
                    prev[i] = now
            if min > cost[i]:
                min = cost[i]
                next = i
        if next == -1: break
        now = next
    return [get_path(start, goal, prev), cost[goal]]

dis = 0
a = 0
for x in name:
    if x == v_from:
        dis = a
        break
    a = a + 1

arr = 0
b = 0

for y in name:
    if y == v_to:
        arr = b
        break
    b = b + 1

namelis=[]
timeSum = 0
count = 0


path, distance = Dikstra(graph, dis, arr)
for x in path:
    count = count + 1
    namelis.append(name[x])
    print(name[x] + " <- ", end = " ")
print("\n")
print("distance:{}km".format(distance))

i = 0
while i <= count-2:
    for z in station:
        if namelis[i] == z[0] and namelis[i+1] == z[1]:
            timeSum = timeSum + z[2]
        elif namelis[i] == z[1] and namelis[i+1] == z[0]:
            timeSum = timeSum + z[2]
    i = i + 1
print(timeSum)

Fare_1p = 0

cur.execute('SELECT * From trainFare')
fareData = cur.fetchall()
for fare in fareData:
    if fare[0] <= distance and fare[1] > distance:
        if PassType == 0:
            Fare_1p = fare[2]
        elif PassType == 1:
            Fare_1p = fare[3]
        else:
            pass

print(Fare_1p)
Fare_Sum = Fare_1p * np



template ="""
<html>
<head>
    <meta charset="shift-jis">
    <meta name="Content-Style-Type" content="text/css">
    <title> 運賃計算 </title>
</head>
<body>
    <form method="GET" action="/cgi-bin/R02/test.py">
    <p> {Fare_1p}円/1人</p>
    <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;×{np}</p>
    <hr style="width:300px; margin-left:0">
    <p style="font-size: 2.0em; font-weight: bold;"> 合計&nbsp;&nbsp;{Fare_Sum}円 </p>
    <p 所要時間&nbsp;{timeSum}分 </p>
    <p> 出発: <input type="text" name="From" value="{From}"> </p>
    <p> 到着: <input type="text" name="To" value="{To}"> </p>
    <p> 人数: <input type="text" name="np" value="{np}"> </p>
    <p>
    <input type="checkbox" name="PassType" value=0 checked="checked">切符
    <input type="checkbox" name="PassType" value=1>IC
    </p>
    <p><input type="submit"></p>
</body></html>
"""
result = template.format(From = v_from, To =v_to, Fare_1p = Fare_1p, np = np,
                         Fare_Sum = Fare_Sum, timeSum = timeSum)
print("Content-type: text/html\n")
print(result

 試したこと

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • umyu

    2018/07/25 23:29

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

    キャンセル

  • masa221

    2018/07/26 00:16

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

    キャンセル

  • t_obara

    2018/07/26 13:09

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

    キャンセル

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

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

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Python

    7953questions

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

  • Webサイト

    1076questions

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

  • SQLite

    622questions

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