Gavin_Stargazer 2021-07-23 15:30 采纳率: 62.5%
浏览 55
已结题

【python】【sqlite】对SELECT结果的二次处理,同一代码不同场景不生效的原因?


import sqlite3

conn = sqlite3.connect("test.db")
conn.execute(
    """CREATE TABLE USER(
                ID        INTEGER  NOT NULL  PRIMARY KEY  ,
                USERNAME  TEXT     NOT NULL  UNIQUE,
                PASSWORD  TEXT     NOT NULL,
                LOCK      TEXT     NOT NULL  DEFAULT 'FALSE',
                LOCKTIME  FLOAT    DEFAULT NULL);"""
)
conn.execute("INSERT INTO USER (USERNAME,PASSWORD) VALUES ('lily',123456)")
conn.commit()
conn.close()

# --------------------------------------
# 以上是基础数据,为各位提供背景数据
# 以下是遇到的问题
# --------------------------------------

# 第一种场景:可以正常运行
conn = sqlite3.connect("test.db")
user_info = conn.execute(
    "SELECT PASSWORD,LOCK,LOCKTIME FROM USER WHERE USERNAME = 'lily'"
)
print("场景一:{}".format(user_info.fetchone()))  # 这一行可正常出结果
conn.close()


# 第二种场景:不能运行
conn = sqlite3.connect("test.db")
try:
    user_info = conn.execute(
        "SELECT PASSWORD,LOCK,LOCKTIME FROM USER WHERE USERNAME = 'lily'"
    )
    if user_info.fetchone()[1] == "TRUE":
        print("此账号已锁定")
    else:
        print("没有锁定,可以继续")
        print(
            "场景二:{}".format(user_info.fetchone())
        )  # 【遇到的问题】这一行结果为None,请问为什么不出结果?要怎么改才能像【场景一】一样出结果?
except Exception as e:
    print(str(e))
    print("用户不存在")
conn.close()
  • 写回答

2条回答 默认 最新

  • soar3033 2021-07-23 15:46
    关注

    改成这样

     
    import sqlite3
    conn = sqlite3.connect("test.db")
    conn.execute(
        """CREATE TABLE USER(
                    ID        INTEGER  NOT NULL  PRIMARY KEY  ,
                    USERNAME  TEXT     NOT NULL  UNIQUE,
                    PASSWORD  TEXT     NOT NULL,
                    LOCK      TEXT     NOT NULL  DEFAULT 'FALSE',
                    LOCKTIME  FLOAT    DEFAULT NULL);"""
    )
    conn.execute("INSERT INTO USER (USERNAME,PASSWORD) VALUES ('lily',123456)")
    conn.commit()
    conn.close()
    # --------------------------------------
    # 以上是基础数据,为各位提供背景数据
    # 以下是遇到的问题
    # --------------------------------------
    # 第一种场景:可以正常运行
    conn = sqlite3.connect("test.db")
    user_info = conn.execute(
        "SELECT PASSWORD,LOCK,LOCKTIME FROM USER WHERE USERNAME = 'lily'"
    )
    print("场景一:{}".format(user_info.fetchone()))  # 这一行可正常出结果
    conn.close()
     
    # 第二种场景:不能运行
    conn = sqlite3.connect("test.db")
    try:
        user_info = conn.execute(
            "SELECT PASSWORD,LOCK,LOCKTIME FROM USER WHERE USERNAME = 'lily'"
        )
        res=user_info.fetchone()
        if res[1] == "TRUE":
            print("此账号已锁定")
        else:
            print("没有锁定,可以继续")
            print(
                "场景二:{}".format(res)
            )  # 【遇到的问题】这一行结果为None,请问为什么不出结果?要怎么改才能像【场景一】一样出结果?
    except Exception as e:
        print(str(e))
        print("用户不存在")
    conn.close()
    

    fetchone()是迭代的,你下面再次调用的时候实际上已经不是前面读取的那条了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 7月31日
  • 已采纳回答 7月23日
  • 创建了问题 7月23日

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?