zoukankan      html  css  js  c++  java
  • Flask Bug记录之JinJa2.exceptions.UndefinedError: 'sqlite3.Row object' has no attribute 'get'

    源码

    py文件定义db的工厂函数如下

    def get_db():
        if "db" not in g:
            g.db = sqlite3.connect(
                current_app.config["DATABASE"],
                detect_types=sqlite3.PARSE_DECLTYPES
            )
            g.db.row_factory = sqlite3.Row
    
        return g.db
    
    <nav>
        <h1>Flaskr</h1>
        <ul>
            {% if g.user %}
                <li><span>{{ g.user.get("username") }}</span></li>
                <li><a href="{{ url_for('auth.logout') }}">Log Out</a></li>
            {% else %}
                <li><a href="{{ url_for('auth.register') }}">Register</a></li>
                <li><a href="{{ url_for('auth.login') }}">Log In</a></li>
            {% endif %}
        </ul>
    </nav>
    

    Bug

    在这里插入图片描述
    在这里插入图片描述

    分析

    1、第一反应是 sqlite3 不支持 sqlite3.Row 属性
    特意查了官方文件,明确示例表示,是支持的。
    2、检查代码的正确性, 没有书写错误
    3、有回头仔细看了下错误提示信息, 说的是 sqlite3.Row 没有 get 属性
    在看到,代码里使用的是 g.user.get("username"),知道原因出在此了。

    原因

    sqlite3.Row 虽然返回的是dict 类型, 但是他支持的写法是 g.user["username"]
    而不是python 中的 dict 中支持的 .get() 方法

    反思

    遇到错误,先不要急,也不要凭感觉,以为。。。
    要先仔细看下错误信息, 这样避免少走弯路。

    不过,走弯路也不是坏事,至少让自己知道了更多其他的知识。定位问题的能力有所提升。

  • 相关阅读:
    【简●解】POJ 1845 【Sumdiv】
    【简●解】 LG P2730 【魔板 Magic Squares】
    团队会议01
    【随手记】原型展示+电梯演讲
    发际线总和我作队-第一次视频会议
    团队项目-记账App
    人生第一篇博客 , 当然是经典的 "Hello World"
    窗体评分系统
    优化MySchool数据库设计总结
    相关子查询
  • 原文地址:https://www.cnblogs.com/haitao130v/p/11487133.html
Copyright © 2011-2022 走看看