🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Bottle

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

SQLite

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

Python

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

Q&A

解決済

3回答

644閲覧

[Python] bottleで発生したTypeErrorの解決方法がわからない

youja

総合スコア4

Bottle

Bottleは、PythonのWebサーバです。1つのPythonファイルで構成されており、非常に軽量。Web APIの作成や導入が簡単で、DjangoやFlaskに比べ使いやすくシンプルなことが特徴です。

SQLite

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

Python

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

0グッド

0クリップ

投稿2019/11/25 07:50

編集2019/11/25 07:54

前提・実現したいこと

Python初心者です。
どこで躓いているのかわからず、ご指導いただければと思います。

Python3系でWebフレームワークのbottleを利用してWEBアプリケーションの開発をしています。
やりたいことは以下の通りです。

bratをWEBアプリケーションに組み込んで、SQLiteに格納したデータを取得して表示したい。

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

Traceback (most recent call last): File "/Users/Username/nlp/py3env/lib/python3.7/site-packages/bottle.py", line 862, in _handle return route.call(**args) File "/Users/Username/nlp/py3env/lib/python3.7/site-packages/bottle.py", line 1742, in wrapper rv = callback(*a, **ka) File "src/sample_06_08.py", line 23, in get row = datastore.get(doc_id, fl=['content']) File "/Users/Username/nlp/src/sqlitedatastore.py", line 40, in get for key, value in zip(fl, row_ls): TypeError: zip argument #2 must support iteration

該当のソースコード

Python

1# sqlitedatastore.py 2def get(doc_id, fl): 3 row_ls = conn.execute( 4 'SELECT {} FROM docs WHERE id = ?'.format(','.join(fl)), 5 (doc_id,)).fetchone() 6 row_dict = {} 7 for key, value in zip(fl, row_ls): 8 row_dict[key] = value 9 return row_dict

Python

1# sample_06_08.py 2@bottle.get('/get') 3def get(): 4 doc_id = bottle.request.params.id 5 names = bottle.request.params.names.split() 6 7 row = datastore.get(doc_id, fl=['content']) 8 text = row['content'] 9 text = re.sub(r'[。!]', '\n', text) 10 11 data = { 12 'collection': { 13 'entity_types': [], 14 }, 15 'annotation': { 16 'text': text, 17 'entities': [], 18 'relations': [], 19 }, 20 } 21 22 mapping = {} 23 for name in names: 24 annos = datastore.get_annotation(doc_id, name) 25 for i, anno in enumerate(annos): 26 data['collection']['entity_types'].append({ 27 'type': name, 28 'bgColor': '#7fa2ff', 29 'borderColor': 'darken' 30 }) 31 32 Ti = 'T{0:d}'.format(len(data['annotation']['entities']) + 1) 33 data['annotation']['entities'].append([ 34 Ti, 35 name, 36 [[anno['begin'], anno['end']]] 37 ]) 38 mapping[(name, i)] = Ti 39 40 for name in names: 41 annos = datastore.get_annotation(doc_id, name) 42 for i, anno in enumerate(annos): 43 if 'link' not in anno: 44 continue 45 name_linked, i_linked = anno['link'] 46 if (name, i) not in mapping or (name_linked, i_linked) not in mapping: 47 continue 48 49 data['annotation']['relations'].append([ 50 'R{0:d}'.format(len(data['annotation']['relations']) + 1), 51 'arg', 52 [['src', mapping[(name, i)]], ['tgt', mapping[(name_linked, i_linked)]]] 53 ]) 54 55 return json.dumps(data, ensure_ascii=False)

試したこと

ターミナルから[sample_06_08.py]を実行。
指定したlocalhostにアクセス。

結果:データが表示されず、エラーが帰ってくる。

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

[環境]
・ macOS Catalina(10.15.1)
・ Python 3.7.4
・ bottle 0.12.17

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

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

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

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

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

guest

回答3

0

解決しました。
試行錯誤した結果、プログラムの記述やデータベースではなく、サーバー側の問題でした。
port番号の変更によってアクセス可能になりました。

ご協力いただいたみなさま、本当にありがとうございました。

投稿2019/11/26 07:39

youja

総合スコア4

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

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

shiracamus

2019/11/26 07:47

DBに接続できなくてrow_is変数がNoneになっていたとか?
youja

2019/11/26 07:56

おそらくそうだと思います。 アクセスしていない時に変数の型を確認したところ問題なかったので。 ありがとうございました!
guest

0

自己解決

結果、プログラムやデータベースの問題ではなく、サーバー側の問題でした。
port番号の変更によって解決しました。

ご協力いただいたみなさま、本当にありがとうございました。

投稿2019/11/26 07:36

youja

総合スコア4

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

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

Baki1028

2020/09/23 16:51

port番号は何番に変更されたでしょうか
guest

0

row_ls変数がリストやタプルや文字列のような要素を順番に取り出せるiterableなオブジェクトじゃないと言ってます。
row_ls変数のタイプを調べてみてはいかがですか?

投稿2019/11/25 23:15

shiracamus

総合スコア5406

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

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

youja

2019/11/26 03:05

ご返信ありがとうございます。 sqlitedatastore.pyのget関数は他のプログラムにも組み込んでまして、動作確認できております。 なので、データの中身はfor文で回すのに問題ないとは思います。 今回だけエラーが出ることがわからない状態です。。。 何か他にも必要な物がありましたら載せます! よろしくお願いいたします。
shiracamus

2019/11/26 03:21

エラーメッセージが TypeError: zip argument #2 must support iteration で、2番目の引数がiterationできないと言ってるので、2番目の引数row_is変数の値を調べるべきだと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問