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()
行き詰まっています。何卒ご教授よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー