【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()

改成这样

 
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()是迭代的,你下面再次调用的时候实际上已经不是前面读取的那条了

self.cursor.fetchone() 只能调用一次,你只有一条数据啊,你可以试试第一场景多次执行self.cursor.fetchone(), 你场景二调用了两次这个, 你可以把判断为FALSE的放前面打印