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

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

ただいまの
回答率

89.99%

Flask・SQLAlchemyでDBからデータを取得したい

解決済

回答 1

投稿

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

telluru052

score 7

DBのデータを取得したいのに違うデータが入る

python勉強中の初心者です。
python(flask)・SQLAlchemy・sqlite3でテキストデータの入出力ができるWEBアプリを作っています。
テーブルからデータを取得してhtmlで表示したいのですが取得のところがうまくいきません。
printで取得したデータが入るはずのcontentの内容を出力しましたがこのデータがどこから来ているのか(アドレス?)なぜ値でなくこのようなデータになってしまうのかわかりません…。
大部分は下記のサイトを参考に書いています。
原因と対策をどうかご教示お願いいたします。

参考サイト-flask入門-

ソースコード

#webapp.py
from flask import Flask, render_template,request,redirect,abort
from flaski.models import PageContent, NameContent

app = Flask(__name__)

@app.route("/name")
def nameCreate():
    contents = NameContent.query.all()
    print(contents)
    return render_template("NameCreate.html",contents=contents)

if __name__ == "__main__":
    app.debug=True
    app.run()

#database.py
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
import os

#実行中ファイルディレクトリの絶対パスをneem.dbと結合
database_file = os.path.join(os.path.abspath(os.path.dirname(__file__)),'neem.db')
#接続オブジェクト生成
engine = create_engine('sqlite:///' + database_file, convert_unicode=True,echo=True)


#セッション作成
db_session = scoped_session(sessionmaker(autocommit=False, autoflush=False, bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()

def init_db():
    import flaski.models
    Base.metadata.create_all(bind = engine)

#models.py
from sqlalchemy import Column, Integer, String, Text, DateTime
from sqlalchemy.orm import relationship
from flaski.database import Base

class NameContent(Base):
    __tablename__ = 'neemnames'
    id = Column(Integer,primary_key = True)
    page_id = Column(Integer)
    coma = Column(Integer,nullable=False)
    serif = Column(Text)
    nb = Column(Text)

    def __init__(self, page_id=None, coma=None, serif=None, nb=None):
        self.page_id = page_id
        self.coma = coma
        self.serif = serif
        self.nb = nb

logのprint結果

[<flaski.models.NameContent object at 0x000001A46B59E6D8>, <flaski.models.NameContent object at 0x000001A46B59E748>, <flaski.models.NameContent object at 0x000001A46B59E7B8>]

試したこと

いろいろなサイトを読みあさりましたがこれといった解決方法は見つけられませんでした…

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

python3.6.8
flask1.0.2
sqlite3

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 1

checkベストアンサー

+1

http://www.kzfmix.com/flaski/second.html

WikiContentクラスではそれぞれの属性の型や主キー、ユニークかどうかなどを指定しています。_ _repr__メソッドでは出力した時にどう表示させるかを定義しています。


https://docs.python.org/ja/3.6/library/stdtypes.html#str

object が _ _str__() メソッドを持たない場合、str() は代わりに repr(object) の結果を返します。


https://docs.python.org/ja/3.6/library/functions.html#repr

そうでない場合は、山括弧に囲まれたオブジェクトの型の名前と追加の情報 (大抵の場合はオブジェクトの名前とアドレスを含みます) を返します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/03/09 15:56 編集

    def __repr__(self):
    return '<NameContent(id={},page_id={},coma={},serif={},nb={})>'.format(self.id,self.page_id,self.coma,self.serif,self.nb)
    で全件取得できました!ありがとうございました。

    キャンセル

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

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