Доп. функция в sql не работает

Рейтинг: 0Ответов: 1Опубликовано: 21.07.2023
import sqlite3


try:
    connection = sqlite3.connect('data.db')
    cursor = connection.cursor()
except sqlite3.DatabaseError:
    print('Ошибка подключения')
finally:
    connection.close()
    
    
class User:
    def __init__(self, name, surname, age, gender):
        self.name = name
        self.surname = surname
        self.age = age
        self.gender = gender
        
def create_table_user(cursor):
    command = '''
    CREATE TABLE IF NOT EXISTS users(
        id INTEGER PRIMARY KEY,
        name TEXT,
        surname TEXT,
        age INTEGER,
        gender TEXT);
    '''
    
    cursor.execute(command)
def add_user(cursor, user):
    command = '''
    INSERT INTO users (name, surname, age, gender) VALUES(?, ?, ?, ?);
    '''
    
    cursor.execute(command, (user.name, user.surname, user.age, user.gender))

def get_gender_people(cursor, user_gender):
    command = '''
    SELECT *  FROM users WHERE gender = ?;
    '''
   
    result = cursor.execute(command, user_gender)
    user = result.fetchall()
    print(user)
if __name__ == '__main__':
    with sqlite3.connect('data.db') as cursor:
        create_table_user(cursor)
        add_user(cursor, User(name = 'Loli', surname = 'Lolivna', age = 17, gender = 'female'))
        add_user(cursor, User(name = 'Zhenya', surname = 'Saifulina', age = 16, gender = 'female'))
        add_user(cursor, User(name = 'Kirill', surname = 'Boyov', age = 19, gender = 'male'))
        get_gender_people(cursor, 'male')
        get_users_list(cursor)

Добрый день, у меня тут возникла одна проблемка. Я не могу понять в чем дело с кодом, а именно с функцией вытягивания людей по гендеру. Мол если я заменю gender на id, то он спокойно выведет мне о них информацию, однако, меняя id на gender/age и т.п, программа сразу выдает ошибку, что не хватает привязок. Подскажите, пожалуйста, как мне это исправить

Ответы

▲ 1

Вам нужно оборачивать в кортеж:

result = cursor.execute(command, (user_gender,))

Функция execute вторым параметром ожидает кортеж, а когда вы в нее передаете 'male', то это по сути будет:

result = cursor.execute(command, ('m', 'a' , 'l', 'e'))

Получится 4 параметра. Но т.к. у вас в sql-запросе ожидается только 1, возникнет та ошибка