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

Flask-SQLAlchemy查询直接输出仅显示行号不显示实际内容问题排查

问题根源

你观察到的输出差异,核心原因是SQLAlchemy模型的__repr__方法定义差异:
Python中所有类的实例被直接打印/转为字符串时,会调用类内置的__repr__方法返回展示内容。你看的教程中,User模型自定义了__repr__方法,返回了包含username字段的格式,所以输出为<User 'test'>;而你的Ip模型没有自定义该方法,用的是SQLAlchemy默认的__repr__逻辑,只会返回类名+主键ID,因此你看到的是<Ip 1>这类不带IP地址的内容。

修复方案

方案1:给Ip模型添加自定义__repr__方法

修改model.py中的Ip类代码:

class Ip(db.Model):
    __tablename__ = 'ips'
    id = db.Column(db.Integer, primary_key=True)
    ip_address = db.Column(db.String(14), index=True)
    
    # 新增__repr__方法,自定义展示内容
    def __repr__(self):
        return f"<Ip '{self.ip_address}'>"

添加后你再直接在模板输出{{ips}},就会得到类似<Ip '192.168.1.1'>, <Ip '10.0.0.1'>的带实际IP的展示效果,和你看的教程效果一致。

方案2:模板中迭代获取IP字段值(更适合实际业务展示)

如果你不需要展示<Ip 'xxx'>这种格式,只想输出纯IP地址列表,直接修改模板代码遍历ips列表,取每个实例的ip_address属性即可:

{% extends 'base.html' %}
{%block content%}
    <h1>List of blocked IP's</h1>
    <div class="container-fluid form-group d-flex justify-content-center m-3">
      <ul>
        {% for ip in ips %}
        <li>{{ ip.ip_address }}</li>
        {% endfor %}
      </ul>
    </div>
 {%endblock%}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 09:27:03