Python и SQLite: проверьте, существует ли элемент в базе данных?

У меня есть метод, который записывает в базу данных имя пользователя и пароль пользователя, который хочет зарегистрироваться. Перед сохранением имени пользователя и пароля, которые они предоставили в базе данных, я хочу проверить, существует ли уже выбранное имя пользователя в списке «ожидающих» или в списке одобренных «контактов».

Вот код, который я использовал для этого:

@cherrypy.expose def writePending(self, username=None, password=None, message=None, signin=None): """ Add request of friendship into a database which stores all pending friendships. """ page = get_file(staticfolder + "/html/friendingPage.html") if username != "" and password != "" and message !="": con = lite.connect('static/database/Friendship.db') cur = con.cursor() with con: cur.execute("CREATE TABLE IF NOT EXISTS pending(user TEXT, pass TEXT, info TEXT)") cur.execute("CREATE TABLE IF NOT EXISTS contacts(user TEXT, pass TEXT)") "Check to see if the username is already registered" cur.execute("Select * from pending where user = ?", (username, )) check1=cur.fetchone() cur.execute("Select * from contacts where user = ?", (username, )) check2=cur.fetchone() if check1[0] != None: page = page.replace("$Error", "The ID you used is still pending for friendship") elif check2[0] != None: page = page.replace("$Error", "The ID you used is already added as a contact") else: cur.execute("CREATE TABLE IF NOT EXISTS pending(user TEXT, pass TEXT, info TEXT)") cur.execute("INSERT INTO pending VALUES(?, ?, ?)", (username, password, message)) page = get_file(staticfolder + "/html/thankYouPage.html") else: page = get_file(staticfolder + "/html/friendingPage.html") page = page.replace("$Error", "You Must fill out all fields to proceed") return page 

Однако я бы получил сообщение о том, что

 Traceback (most recent call last): File "/usr/lib/pymodules/python2.7/cherrypy/_cprequest.py", line 606, in respond cherrypy.response.body = self.handler() File "/usr/lib/pymodules/python2.7/cherrypy/_cpdispatch.py", line 25, in __call__ return self.callable(*self.args, **self.kwargs) File "proj1base.py", line 540, in writePending if type(check1[0]) != None: TypeError: 'NoneType' object is not subscriptable 

Мне интересно, что я могу сделать, чтобы этого избежать?

Благодарю.

В вашем примере check1 будет None , поэтому вы не можете использовать [0] на нем. Вы могли бы сделать что-то вроде этого:

 if check1 is not None: (error response) 

Или вместо этого просто используйте cur.rowcount вместо cur.fetchone() :

 if cur.rowcount > 0: (error response) 

fetchone() возвращает None если строки нет. Вы можете сделать следующее:

 if check1: ...do something with check1, like check1[0]... else: .. means no row