Проблема на с типами на пайтон
def CreateTable():
con = sqlite3.connect('Exhibition.db')
cur = con.cursor()
cur.execute('''CREATE TABLE Crafts (ID int, META text, Design text, Photo text, Ratings text);''')
con.commit()
con.close()
def GetPhotoFromDB(ID=0):
con = sqlite3.connect('Exhibition.db')
cur = con.cursor()
for row in cur.execute('SELECT * FROM Crafts'): # ORDER BY META
kek = row
if row[0] == ID:
break
if kek[0] != ID:
print('photo not found!!!', 'ID: ', ID, 'Index: ', kek[0])
return 'photo no found'
return kek[3]
con.commit()
con.close()
даже если kek[0] равно 2 и ID равно 2, то всё равно photo not found
пробовал создать переменную например
realID: int = 0
realID = kek[0]
но тоже не робит
Ответы (1 шт):
Скорее всего row[0] возвращает строку. Не забывайте, что
a = 1
b = '1'
print(a == b) # false
попробуйте сделать так:
def GetPhotoFromDB(ID=0):
con = sqlite3.connect('Exhibition.db')
cur = con.cursor()
for row in cur.execute('SELECT * FROM Crafts'): # ORDER BY META
kek = row
if row[0] == str(ID):
break
if kek[0] != str(ID):
print('photo not found!!!', 'ID: ', ID, 'Index: ', kek[0])
return 'photo no found'
return kek[3]
con.commit()
con.close()
P.S.
Вы привели пример с данным кодом:
realID: int = 0
realID = kek[0]
Сославшись на то, что он не помогает решить проблему. Так и должно быть.
Указание типа через :type указывает, какой тип у переменной ожидается. Но это не значит, что переменная не может быть другого типа.
То есть:
real_id: int = 0
real_id = 123 # Сработает
real_id = 'Hello world!' # Все-равно сработает.
Данное дополнение может быть полезно, например чтобы IDE типа PyCharm могли давать вам подсказки с возможными методами, например если вы уверены, что ваша функция вернет list, вы можете указать это способом, указанным выше, и ваше IDE будет предлагать вам возможные методы, считая, что ваша переменная имеет тип list. Но учтите, что если тип окажется НЕ list, это может вызвать ошибки.