2013-07-06 7 views
2

우리는 기본 머드를 만들고 MySQL 데이터베이스에서 저장 /로드하기를 원합니다. 초기 명령으로 "캐릭터가 있습니까?" 프롬프트가 나타나면 "아니요"부분이 정렬되고 데이터베이스에 성공적으로 저장됩니다. 그러나 "예"부분에 문제가 있습니다. 구체적으로 DB에 사용자 입력에 대한 특정 항목이 있는지 확인하여 데이터가 존재하는지 확인하고 결과적으로 데이터를로드하는 것입니다.MySQL과 Python - 사용자 입력으로 엔트리를 확인하는 방법?

여기 내 현재 코드입니다 :

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

내가 어떤 오류가없는, 그냥 처음부터가는 경우, 두 번째로 문, 변경은 변경되지 않습니다하지만 ("새로운"이름을 저장 항목이 이미 존재하므로 db)

답변

1

Accord to DB APIcur.execute의 반환 값은 정의되지 않습니다. 따라서 사용하는 경우

logincheck = cur.execute(loadname, login) 

코드는 데이터베이스 어댑터의 특정 동작에 의존합니다. MySQLdb 예를 들어, 선택된 행 (존재하는 경우)의 기본 키를 리턴하거나 그러한 행이없는 경우 0L을 리턴합니다. 그럼에도 불구하고 나는 이것에 의존하지 않는 것이 낫다고 생각한다.

DB API가 보장하는 동작에만 의존한다면 코드가 좀 더 일반적입니다.

대신 당신은

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

logincheck 튜플 (행이 존재하는 경우) 또는 값 None를 만들 것입니다 사용할 수 있습니다. loginID이고 CharactersDB 인 경우 loginchecklogin이 아닌 (login,) 튜플처럼 보입니다. login이 ID가 아닌 경우 logincheck은 없음입니다.

그래서 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)) 
+0

죄송합니다, 들여 쓰기 내가 코드를 붙여 잘못 할 때 간격 내 잘못이었다. 하지만 고마워! 나는 지금 당장 시도 할 것이다 – mathieu

+0

이것은 바보 같은 질문이라고 생각한다. (우리는 여전히 일반적으로 프로그래밍에 익숙하다.)하지만 새로운 if 문을 사용하면 logincheck를 어떻게 체크 할 수 있을까? – mathieu

+0

죄송합니다. 그것은'login is None'이 아니라'if logincheck is None'이어야합니다. – unutbu