Проблема на с типами на пайтон

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 шт):

Автор решения: NEStenerus nester

Скорее всего 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, это может вызвать ошибки.

→ Ссылка