2016-07-23 8 views
0

私のFlaskプロジェクトでは、データベースのテーブルからすべてを選択し、各行を別々の行に印刷したいのですか?(フラスコ)python mysql - どのように選択したデータをforループを通して渡して返しますか?

このスクリプトでは、forループを介してデータを渡す必要がありますか?

どうすれば返品できますか? app.pyで

from flask import Flask, render_template 
import MySQLdb 

app = Flask(__name__) 

@app.route('/') 
def db(): 
    db = MySQLdb.connect("localhost","myusername","mypassword","mydbname") 

    cursor = db.cursor() 

    cursor.execute("SELECT * from p_user") 

    cursor.fetchall() 

    db.close() 

    return 


if __name__ == '__main__': 
    app.run() 

================================== =============

この試してもうまくいきませんでした。

は、私はこのようなapp.pyで2行を編集した:

data = str(cursor.fetchall()) 

return render_template('db.html', data = data) 

そして、このようdb.html作成:

{% for each in data %} 

    print {{ each }}<br> 

{% endfor %} 

そして、出力された:そこ

print (
print (
print 1 
print , 
print 
print ' 
print s 
print h 
.... 

タプルのリストです。どのように各インデックスに到達できますか?

+0

これ以上の解決策はありますか? – niloofar

答えて

1

通常、これだけ、返された値をループそして、このよう

@app.route('/') 
def db(): 
    db = MySQLdb.connect("localhost","myusername","mypassword","mydbname") 

    cursor = db.cursor() 

    cursor.execute("SELECT * from p_user") 

    rows = cursor.fetchall() 

    db.close() 

    return rows 

rows = db() 

for row in rows: 
    print(row) 
を、それを変数にそのリストを保存して returnを全く cursor.fetchallを呼び出すことなく(あなたが巨大なテーブルを持っている場合は、メモリを節約することによって)

たり、簡単かつ効率的:

@app.route('/') 
def db(): 
    db = MySQLdb.connect("localhost","myusername","mypassword","mydbname") 

    cursor = db.cursor() 

    cursor.execute("SELECT * from p_user") 

    rows = [] 

    for row in cursor: 
     rows.append(row) 
     print(row) 

    return rows 

EDIT:

彼らは(タプルのリスト)ですとしての結果は、ちょうどあなたのテンプレートに渡すstrする必要はありません、この方法:

data = cursor.fetchall()  
return render_template('db.html', data = data) 

そして、あなたのテンプレートは次のようになります。

<table border="1" cellpadding="5" cellspacing="5"> 
{% for row in data %} 
    <tr> 
    {% for d in row %} 
     <td>{{ d }}</td> 
    {% endfor %} 
    </tr> 
{% endfor %} 
</table> 

これは、テーブルとして出力する必要があります。

+0

はい、もちろん、 'rows = str(cursor.fetchall())'を設定して行を返すとタプルのリストを返すので、私はタプルのリストに直面します。しかし、あなたのスクリプトは私のためにこのエラーを返します: 'Internal Server Error。サーバーで内部エラーが発生し、要求を完了できませんでした。サーバーに過負荷がかかっているか、アプリケーションにエラーがあります。 – niloofar

+0

2番目のスクリプトは、そのエラーを再度発生させます。 – niloofar

+0

私はここに質問があります...最後の3行は 'return'部分の後に置かれるので、何も正しくfoできませんか?すべてのものがリターン部分の前に起こるはずですし、ウェブページに印刷されるべきortherの部分を返すべきです、そうですか? – niloofar

0

このような何か試してみてください:タプルのリストを返すcursor.fetchall()

row=cursor.fetchone() 
while row is not None: 
    print row 
    # you can access to each column by looping over row 
    # for column in row: 
    # print row 
    row=cursor.fetchone() 
+0

再び同じエラーが発生しました。 – niloofar

0

リターンrender_template( 'index.htmlを'、ポスト=ポスト)

データをフェッチするためにそれを使用し、その後

class Post(db.Model): 

    id = db.Column(db.Integer, primary_key=True) 
    title = db.Column(db.String(128)) 
    body = db.Column(db.Text) 

    def __init__(self, title, body): 
    self.title = title 
    self.body = body 


@app.route('/') 
def index(): 
post = Post.query.all() 

を、フラスコSQLAlchemyのようなORMを使用して、モデルクラスを使用して、テーブルを定義し、素晴らしい例があるhttps://techarena51.com/index.php/flask-sqlalchemy-tutorial/

関連する問題