gpt4 book ai didi

python - MySQL 和 Python - 如何检查用户输入的条目?

转载 作者:搜寻专家 更新时间:2023-10-30 20:41:30 24 4
gpt4 key购买 nike

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

这是我当前的代码:

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 语句到第二个,保存"new"名称(尽管没有对数据库进行任何更改,因为条目已经存在)

最佳答案

根据DB API cur.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 语句 可以看起来像这样:

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

关于python - MySQL 和 Python - 如何检查用户输入的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17505973/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com