【问题标题】:MySQL and Python - how to check an entry with user input?MySQL 和 Python - 如何使用用户输入检查条目?
【发布时间】:2013-07-06 18:42:25
【问题描述】:

我们正在创建一个基本的 MUD,并希望它从 MySQL 数据库中保存/加载,作为初始命令,我们希望有一个初始的“你有角色吗?”提示,我们将“否”部分整理出来,并成功保存到数据库中。但是,我遇到了“是”部分的问题,更具体地说,它会根据用户输入检查数据库中的特定条目,以确保它存在,然后加载数据。

这是我当前的代码:

global name
name = ''
savename = ("INSERT INTO CharactersDB (ID) VALUES (%s)")
loadname = ("SELECT ID FROM CharactersDB WHERE ID=%s")

def newname():
    global name
    newchar = raw_input("Do you have a character? (y/n) ")
    if newchar == 'y':
        login = raw_input("Please enter your Character's name: ")
        logincheck = cur.execute(loadname, login)
        if login == logincheck:
            print "pass"
            print "Successfully loaded ", login, "from the database"

        else:
            print "Sorry, could not find you in the database"
            print "Or it just isn't working"

    else:
        name = raw_input("Please enter a new name: ")
        #save new name to the database
        cur.execute(savename, name)
        print "Name saved, you are now called ", name
        db.commit()
        return name

newname()

我没有任何错误,它只是从第一个 if 语句到第二个,保存了“新”名称(尽管由于条目已经存在,所以没有对 db 进行任何更改)

【问题讨论】:

    标签: python mysql database mud


    【解决方案1】:

    根据DB APIcur.execute的返回值是未定义的。所以如果你使用

    logincheck = cur.execute(loadname, login)
    

    那么您的代码将依赖于您的数据库适配器的特定行为。例如MySQLdb,返回所选行的主键(如果存在),如果没有这样的行,则返回0L。不过,我认为最好不要依赖这个。

    如果您只坚持那些由 DB API 保证的行为,您的代码会更加通用。

    你可以使用

    cur.execute(loadname, login)
    logincheck = cur.fetchone()
    

    这将使logincheck 成为一个元组(如果存在一行)或值None。 如果loginCharactersDB 中的ID,那么logincheck 将看起来像元组(login, ),而不是字符串login。 如果 login 不是 ID,则 logincheck 将为 None。

    所以if-statement 可能看起来像这样:

    if logincheck is None:
        print("Sorry, could not find you in the database\nOr it just isn't working")
    else:
        print("pass\nSuccessfully loaded {} from the database".format(login))
    

    【讨论】:

    • 对不起,缩进是我粘贴代码时间距不正确的错。不过谢谢!我现在就试试
    • 我想这是一个愚蠢的问题(我们对一般编程还很陌生),但是使用您的新 if 语句,如何检查 logincheck?
    • 糟糕,我的错误。应该是if logincheck is None,而不是if login is None
    • 太棒了,完美运行!太感谢了!这是一个巨大的进步,因为剩下的数据基本上只是用分配给角色的其他数据替换登录。
    猜你喜欢
    • 2021-12-09
    • 2021-01-04
    • 2022-01-23
    • 2023-01-02
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多