Найти - Пользователи
Полная версия: ошибка TypeError: 'NoneType' object is not subscriptable
Начало » Базы данных » ошибка TypeError: 'NoneType' object is not subscriptable
1 2
ffrr
Пытаюсь запустить такой скрипт
 #!/usr/bin/env python3
import pyinputplus
import settings
import os
try:
    conn = pymysql.connect(
        user=str(settings.user),
        password=str(settings.password),
        host=str(settings.host),
        port=settings.port,
        database=str(settings.database)
    )
except Exception as e:  # print error message when Exception occurs
    print(f"Error connecting to MariaDB Platform: {e}")
    sys.exit(1)
cur = conn.cursor()
if os.path.exists('/home/uzer/PycharmProjects/pythonProject/data.txt'):
   print("File exists")
else:
   username = pyinputplus.inputEmail('Username (must be existing email): ', limit=3)
   cur.execute('SELECT * FROM database WHERE userID = "' + str(username) + '"')
   bas = cur.fetchone()
   print(str(bas[5]))

Но такая ошибка появляется.
 Traceback (most recent call last):
  File "./script.py", line , in <module>
    print(str(bas[5]))
TypeError: 'NoneType' object is not subscriptable
py.user.next
Добавь print'ов, чтобы видеть получаемые значения на разных этапах.

  
username = pyinputplus.inputEmail('Username (must be existing email): ', limit=3)
print('username', repr(username))
cur.execute('SELECT * FROM database WHERE userID = "' + str(username) + '"')
bas = cur.fetchone()
print('bas', repr(bas))
print(str(bas[5]))
ffrr
py.user.next
Добавь print'ов, чтобы видеть получаемые значения на разных этапах.
Добавил print_ы. Выдало такое:
 Username (must be existing email): tezt@t.com
username 'tezt@t.com'
bas None
 Traceback (most recent call last):
  File "./script.py", line , in <module>
    print(str(bas[5]))
TypeError: 'NoneType' object is not subscriptable

непонятно почему bas None, ведь перед условием if стоит
 cur = conn.cursor()
И я пытался эту строку вставить и в условии else: перед cur.execute() - все равно та же ошибка с bas None и TypeError: ‘NoneType’ …
py.user.next
Выполни такой код
  
cur.execute('SELECT * FROM database')
res = cur.fetchone()
print('res', repr(res))

Если будет выводить первую запись, так попробуй
  
cur.execute('SELECT userID FROM database')
res = cur.fetchone()
print('res', repr(res))
ffrr
py.user.next
cur.execute('SELECT * FROM database')
res = cur.fetchone()
print('res', repr(res))
выдало первую строку из database:
 Username (must be existing email): dsd@w.de
res (1, 'uzer1@domain.com', '54f914d30e9197941df33a3d822ae8464461b6e1', 950, 14, '90:0e:b3:32:64:74', '', '')
py.user.next
ffrr
выдало первую строку из database:
Второй код что выводит?
ffrr
 res ('uzer1@domain.com',)
py.user.next
ffrr
  
cur.execute('SELECT * FROM database WHERE userID = "' + str(username) + '"')
Попробуй так в своём первом коде
  
cur.execute('SELECT * FROM database WHERE userID = %s', (username,))
Вводи пользователя, который есть в базе.
Например,
uzer1@domain.com
ffrr
выводит полную строку из БД для этого userID:
 res (1, 'uzer1@domain.com', '54f914d30e9197941df33a3d822ae8464461b6e1', 950, 14, '90:0e:b3:32:64:74', '', '')
ffrr
Если я ввожу несуществующий userID, то у меня
 res None
иначе выводит полную строку из БД для этого userID. Может в моем коду нужен еще 1 блок try: except?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB