You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从Python将数据库数据渲染至HTML表格的问题

问题解决方法

核心问题

你当前的代码把HTML直接写在Python逻辑中,既存在语法错误,也没有对{0}这类占位符做显式的字符串格式化处理,所以Python不会自动将占位符替换为数据库返回的row数据。

步骤1:修正代码语法,将HTML转为字符串模板

把HTML内容用三引号'''包裹作为字符串模板,通过Python字符串格式化方法替换占位符。

方法一:使用f-string(Python 3.6+推荐)

直接在字符串中插入row的索引值,语法直观:

for row in results:     
    print("print data", row)
    # 用三引号包裹HTML模板,f-string直接插入row元素
    html_content = f'''
    <div id="Table2LYR">
        <table id="Table2" style="height: 179px;border-spacing:2px;border-collapse:separate;">
            <tr style="height: auto;">
                <td style="padding: 2px;text-align:center;vertical-align:middle;width:187px;" id="Cell5">
                    <p style="line-height: 0px; margin-bottom: 0px; max-height: 43px; display: block; width: 187px;">
                    <img height="100" src="{row[6]}" style="vertical-align: top;"></p>
                </td>
                <td style="background-color: rgb(240,234,225);padding: 2px;width:698px;" id="Cell6">
                <h3>{row[0]}</h3>
                <p>
                    Author: {row[1]}<br>
                    Publisher: {row[2]}<br>
                    ISBN:{row[3]} <br>
                    Year: {row[4]} <br>
                    Our price:{row[5]} <br>
                    <p style="margin-bottom: 0px; max-height: 19px; display: block; width: 698px;">Description: {row[7]}</p>
                </p>
                </td>
            </tr>
        </table>
    </div>
    '''
    # 后续将html_content传递到前端页面展示(比如Flask中返回拼接后的html,或存入响应)

方法二:使用str.format()

如果Python版本较低,可保留原占位符写法,用format()方法传入row元素:

for row in results:     
    print("print data", row)
    # 用format(*row)替换所有占位符
    html_content = '''
    <div id="Table2LYR">
        <table id="Table2" style="height: 179px;border-spacing:2px;border-collapse:separate;">
            <tr style="height: auto;">
                <td style="padding: 2px;text-align:center;vertical-align:middle;width:187px;" id="Cell5">
                    <p style="line-height: 0px; margin-bottom: 0px; max-height: 43px; display: block; width: 187px;">
                    <img height="100" src="{6}" style="vertical-align: top;"></p>
                </td>
                <td style="background-color: rgb(240,234,225);padding: 2px;width:698px;" id="Cell6">
                <h3>{0}</h3>
                <p>
                    Author: {1}<br>
                    Publisher: {2}<br>
                    ISBN:{3} <br>
                    Year: {4} <br>
                    Our price:{5} <br>
                    <p style="margin-bottom: 0px; max-height: 19px; display: block; width: 698px;">Description: {7}</p>
                </p>
                </td>
            </tr>
        </table>
    </div>
    '''.format(*row)
    # 后续处理html_content

步骤2:优化数据访问(可选但推荐)

当前fetchall()返回元组,依赖列顺序易出错。修改store.py为字典游标,让row以字典形式返回,用列名访问更清晰:

def book_list():
    # 定义字典游标,返回的row是字典,键为数据库列名
    mycursor = mydb.cursor(dictionary=True)
    query = "SELECT * FROM " + DBtable
    mycursor.execute(query)
    results = mycursor.fetchall()
    return results

之后在script.py中直接用列名访问:

html_content = f'''
<h3>{row['book_title']}</h3>
<p>Author: {row['author']}<br>...</p>
'''

这样即使数据库列顺序变化,代码也不会出错,可读性更强。

注意事项

  • 确保row的索引或列名与数据库查询列完全对应,避免数据错位。
  • 若使用Web框架(如Flask/Django),推荐用模板引擎(Jinja2)渲染HTML,避免手动拼接字符串的XSS风险和代码混乱。

内容的提问来源于stack exchange,提问作者Snooper_A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 10:56:06