(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/
有很好的例子
在我的 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/
有很好的例子