FlaskでWebアプリの制作を勉強中に以下の問題にぶち当たりました。
# 任意のURLをurlとしてフィルターを掛けている from .models import * from . import db source_list = db.session.query(Link.source).filter_by(target=url).all()
model.pyで定義したLinkクラスの「特定のtargetのsourceだけを抜き取りたい」と考えて上記の処理を記述したのですが、source_listになにも格納されません。
以下のようにLinkにはデータが格納されています。
links = Link.query.all() ↓出力 [<Link algorithm.html, data.html>, <Link algorithm.html, search.html>, <Link algorithm.html, sort.html>, <Link data.html, graph.html>, <Link graph.html, data.html>, <Link graph.html, search.html>, <Link search.html, data.html>, <Link search.html, sort.html>, <Link sort.html, data.html>, <Link sort.html, search.html>]
例えば、target(右の値)==data.htmlを持っているLinkのsourceだけのリストを作りたいです。
targetの値に絞ると以下のように出力されます。
links = db.session.query(Link.source).filter_by(target="data.html").all() ↓出力 [('algorithm.html',), ('graph.html',), ('search.html',), ('sort.html',)] しかし、以下だとできないです。 url_list = ['algorithm.html', 'data.html', 'graph.html', 'search.html', 'sort.html'] for url in url_list: print(url) print(type(url)) source_list = db.session.query(Link.source).filter_by(target= f"{url}").all() # (target=url)もだめでした。 ↓出力 algorithm.html <class 'str'> []
モデルは以下のとおりです。
#models.py class Link(db.Model): source = db.Column(db.String(150), primary_key=True) target = db.Column(db.String(150), primary_key=True)
また、格納は以下のコードで行いました。
link_items = list() url_list = ['algorithm.html', 'data.html', 'graph.html', 'search.html', 'sort.html'] for url in url_list: for link in link_list: # linklistには外側のループ毎にいくつかのurlがランダムに格納されています。 new_link = Link(source=url, target=link) link_items.append(new_link) db.session.add_all(link_items) db.session.commit()
行き詰まっています。何卒ご教授よろしくお願いいたします。
> Linkのsourceとtargetにそれぞれ値が入っているのは確認しています。
ここが具体的でない(何をして、何を観測したのかが分からない)ことで、回答が難しくなっている気がします。
承知いたしました。加筆修正いたします。
すでに回答も付いていまし、再度の話になりますが、コードに不思議なところはないので「何を」「どうやって」確認したのか? という点にかかっていると思います。
データベースをSQLで確認した、とかそういうことではないのですか?
source_listになにも格納されません もFlaskを起動してブラウザからアクセスして確認しているのか? どうかすらわかりません。
「SQLite3を使っていてファイルが別のところにある」が可能性高いとは思ってますが……
「aaa.htmlに条件を絞ると同じ行のddd.htmlが取得できる」といったようにしたいと考えていました。
こうやってデータを格納しました、は分かったのですが、それがデータベースに「入っていること」は確認してないということですか?
「例えば、以下のようにデータが格納されています。 」はどういう意味ですか???
ファイル構造と、ファイルの中身と、実行したコマンド履歴が全部あった方がいい気がします
いくつものアドバイスありがとうございました。データが格納されていなかった原因は、単純に条件に合うデータが存在しなかったからです。お恥ずかしい限りです…。
回答3件
あなたの回答
tips
プレビュー