python - Python / SQL未将连接的数据库显示到表
问题描述
我有一个连接的花卉 SQL 数据库(属、种、comname)填充一个简单地显示该信息的表。我只能让 genus 列正确填充,但不能让 species / comname 列正确填充。
工作代码 - 正确显示一列:
更新.html
<!--this is for the table -->
<div class="container">
<div class="row">
<div class="col">
<table id="table" border="1">
<tr>
<th class="cell">Genus</th>
<th class="cell">Species</th>
<th class="cell">Comname</th>
</tr>
<!--the next line with the python code works as long as you only want the genus information-->
{% for g in genus_update %}
<tr>
<td class="cell">{{g}}</td>
<!--<td class="cell">{{g}}</td>-->
<!--<td class="cell">{{c}}</td>-->
</tr>
{% endfor %}
</table>
</div>
<div class="col">
<!--the right column so that everything is lined up on the left side-->
</div>
</div>
</div>
尝试为其他人使用 for 循环会破坏页面(不确定原因):
{% for s in species_update %}
<tr>
<td class="cell">{{s}}</td>
</tr>
{% endfor %}
{% for c in comname_update %}
<tr>
<td class="cell">{{c}}</td>
</tr>
{% endfor %}
Python.py:
from flask import Flask, render_template, request, g
import sqlite3
app = Flask (__name__)
# conn = sqlite3.connect('flowers.db')
# c = conn.cursor()
DATABASE = 'flowers.db'
def get_db():
db = getattr(g, '_database', None)
if db is None:
db = g._database = sqlite3.connect(DATABASE)
return db
@app.teardown_appcontext
def close_connection(exception):
db = getattr(g, '_database', None)
if db is not None:
db.close()
@app.route('/')
def index():
c = get_db().cursor()
c.execute('SELECT COMNAME FROM FLOWERS')
all_flowers = c.fetchall()
return render_template("index.html", all_flowers=all_flowers)
@app.route('/update')
def update():
c = get_db().cursor()
# this just gets the data from the db
c.execute('SELECT COMNAME FROM FLOWERS')
comname_update = c.fetchall()
c.execute('SELECT GENUS FROM FLOWERS')
genus_update = c.fetchall()
c.execute('SELECT SPECIES FROM FLOWERS')
species_update = c.fetchall()
zipped = zip(genus_update, species_update)
return render_template("update.html", comname_update=comname_update, genus_update=genus_update, species_update=species_update, zipped=zipped)
@app.route('/profile/<name>')
def profile(name):
return render_template("profile.html", name=name)
if __name__ == "__main__":
app.run(debug=True)
解决了
解决方案
html代码:
{% for g, s, c in genus_flowers%}
<tr>
<td class="cell">{{g}}</td>
<td class="cell">{{s}}</td>
<td class="cell">{{c}}</td>
</tr>
{% endfor %}
蟒蛇代码:
@app.route('/update')
def update():
c = get_db().cursor()
# this just gets the data from the db
c = get_db().cursor()
c.execute('SELECT GENUS, SPECIES, COMNAME FROM FLOWERS')
genus_flowers = c.fetchall()
return render_template("update.html", genus_flowers=genus_flowers)
解决方案
我知道在另一个 Python 网络框架 Django 中,您必须引用对象中的字段,而不仅仅是对象本身。因此,如果您执行 Select *,而不是 Select 'field':
@app.route('/update')
def update():
c = get_db().cursor()
# this just gets the data from the db
c.execute('SELECT * FROM FLOWERS')
flowers = c.fetchall()
zipped = zip(genus_update, species_update)
return render_template("update.html", flowers=flowers, zipped=zipped)
然后,您可以执行以下操作:
<!--this is for the table -->
<div class="container">
<div class="row">
<div class="col">
<table id="table" border="1">
<tr>
<th class="cell">Genus</th>
<th class="cell">Species</th>
<th class="cell">Comname</th>
</tr>
<!--the next line with the python code works as long as you only want the genus information-->
{% for f in flowers %}
<tr>
<td class="cell">{{ f.genus }}</td>
<td class="cell">{{ f.species }}</td>
<td class="cell">{{ f.comname }}</td>
</tr>
{% endfor %}
</table>
</div>
<div class="col">
</div>
</div>
</div>
推荐阅读
- c - 单个管道可以被多个进程连接和读取吗
- ssl - 适合 Heroku 的 SSL 证书
- python - 当某人加入特定语音频道时,我如何为其赋予角色?
- python - 如何使用嵌套循环计算整体进度?
- c++ - 我的数学公式实现返回的值与计算器不同
- reactjs - 为什么在使用 React Hooks 时我的尺寸没有在调整大小时更新
- r - h(simpleError(msg, call)) 中的错误:在为函数“[”选择方法时评估参数“i”时出错:“匹配”需要向量参数
- typescript - 在 Vue 3 Typescript 中使用导入道具的正确方法是什么
- linux - 如何从浏览器使用在桥接网络上运行的容器应用程序
- c# - MongoDB连接格式和在c#中的正确使用