(flask) python mysql - 如何通过 for 循环和 return 传递选定的数据?

(flask) python mysql - how to pass selected data though a for loop and return it?

在我的 Flask 项目中,我想 select 数据库中 table 的所有内容并在单独的行中打印每一行?

我应该如何在下面的脚本中通过 for 循环传递数据?

我怎么能return呢?

在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
....

有一个元组列表,我如何到达每个索引。

尝试这样的事情:

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()

通常,cursor.fetchall() returns 一个元组列表,所以只需将该列表保存到一个变量中并 return 它,然后循环返回值,这样

@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)

或者甚至根本不调用 cursor.fetchall 就可以简单有效地(通过节省内存,如果你有一个巨大的 table):

@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

编辑:

不需要 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>

这应该将它们打印为 table。

使用像 Flask-SQLAlchemy 这样的 ORM,使用模型 class 定义您的 table,然后使用它来获取数据

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()

return render_template('index.html', post=post)

https://techarena51.com/index.php/flask-sqlalchemy-tutorial/

有很好的例子