Ответы пользователя по тегу SQLite
  • TypeError: function takes at most 2 arguments (3 given) как исправить?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Нужно передать кортеж:
    cursor.execute("INSERT INTO username_id VALUES(?,?);",(user_id, file_id,))

    PS: После CREATE TABLE... коммит не нужно делать.
    Ответ написан
  • Как сделать поиск в peewee python?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Вам нужно подключить расширение для sqlite. Сам я peewee не пользовался, но вот что нашел - SQLite Extensions(peewee)

    sqlean - огромный список расширений для sqlite. Можно скачать как исходники, так и so/dll/dylib. Конкретно вам нужен плагин под названием unicode.
    Конкретно как подключить его к peewee - не смотрел. Если использовать стандартную библиотеку sqlite3, то так:
    import sqlite3
    
    connection = sqlite3.connect(":memory:")
    connection.enable_load_extension(True)
    connection.load_extension("./unicode.dll")
    Ответ написан
  • Где ошибка в запросе к БД?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Ну давайте поиграем в угадайку.

    В запросе
    $sql = "INSERT INTO таблица1 ('папапп', 'кекекек') ;";
    не должно ли быть VALUES? Хотя могу ошибаться.
    Ответ написан
  • Ошибка sqlite3.OperationalError: no such column: cash, как решить?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    1)db = sqlite3.connect('dab.db')db - не подходящее имя(может завести в заблуждение)
    2) sql = db.cursor()sql - не подходящее имя(может завести в заблуждение)
    3) db.commit() после соединения не нужно делать коммит
    4)
    sql.execute(f"SELECT name FROM users WHERE name = '{user_name}' ")
    уберите к чертям 'f' строки из sql запросов!
    5) global user_name global нужно использовать тогда, когда у вас есть достаточный опыт программирования на Python, и вы знаете что делаете.

    В 99% случаев, исключение выпадает из-за F-строк. Поэтому, замените все sql запросы на правильные, и будет все работать!
    Ответ написан
    1 комментарий
  • Как удалить все дубликаты в бд?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Очень просто. Создаем в этой базе еще одну таблицу с именем prices_average2(например).
    Далее из базы prices_average выбираем все строки. После выборки, у нас будет список кортежей(rows). Создаем пустой список. В цикле пробегаемся по элементам списка. При каждой итерации проверяем, есть ли текущий элемент в списке, если да - то ничего не делаем, если нет, заносим текущий элемент (кортеж) в новую таблицу prices_average2 и добавляем в список. Если бы в базе был уникальный столбец, можно было бы обойтись без второй таблицы(хотя может и сейчас так можно - мне просто лень ночью мозги напрягать:))
    Я конечно не эксперт по БД, но что-то мне подсказывает, что если в базе нет уникального столбца(забыл как называется) - это может доставить некоторых проблем.
    import sqlite3
    
    conn = sqlite3.connect('1.db')
    cursor = conn.cursor()
    
    cursor.execute("""CREATE TABLE IF NOT EXISTS prices_average2 (
        Сервер TEXT,
        Категория TEXT,
        Предмет TEXT,
        Цена  BIGINT,
        День BIGINT,
        Час BIGINT
    )""")
    
    cursor.execute('SELECT * FROM prices_average')
    rows = cursor.fetchall()
    
    unique_list = []
    
    for row in rows:
    	if row in unique_list:
    		pass
    	else:
    		cursor.execute('INSERT INTO prices_average2 VALUES(?,?,?,?,?,?)',row)
    		unique_list.append(row)
    
    conn.commit()
    conn.close()

    Перед экспериментом сделайте резервную копию.
    Ответ написан
    Комментировать
  • Как реализовать авторизацию в sql на питон?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    global db
    global sql
    ???

    1) Не используйте f-строки!
    sqlite3 — DB-API 2.0 interface for SQLite databases
    606075235fbcb461753844.gifКонкретно обратите внимание на:
    Usually your SQL operations will need to use values from Python variables. You shouldn’t assemble your query using Python’s string operations because doing so is insecure; it makes your program vulnerable to an SQL injection attack (see https://xkcd.com/327/ for humorous example of what can go wrong).


    2) Обычно, при регистрации пароль хешируется и добавляется в базу хеш, а не пароль. Потом при авторизации пароль опять хешируется и этот хеш сверяется с хешем в базе.

    Что конкретно у вас не получается? Сверить значение со значением в базе?
    Ответ написан
  • Как сделать замену определенный значений в БД sqlite3 на Python 3?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Играйтесь:
    import sqlite3
    
    conn = sqlite3.connect('users.db')
    cursor = conn.cursor()
    
    cursor.execute('''CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY AUTOINCREMENT,
                                                        user_name TEXT,
                                                        user_id TEXT,
                                                        user_status TEXT
                                                    )''')
    
    cursor.execute('DELETE FROM users')
    
    users = [[None,'Валера','123','blocked'],
            [None,'Тарас','134','blocked'],
            [None,'Степан','145','normal'],
            [None,'Абдурахман','168','blocked'],
            [None,'Петя','190','normal']]
    
    for user in users:
        cursor.execute('INSERT INTO users VALUES(?,?,?,?)',user) # Заполняем таблицу из списка
    conn.commit()
    
    result = cursor.execute('SELECT id,user_id FROM users WHERE user_status="blocked"').fetchall()
    # Выбираем из базы id(порядковый номер пользователя в базе), user_id - id пользователя в вашей системе только тех пользователей,
    # в которыъ статус blocked
    
    for x in result: # перебираем результаты
        id,user_id = x # Распаковываем кортеж
        cursor.execute('UPDATE users SET user_status=? WHERE id=?',('normal',id)) # обновляем записи в таблице.
        # Так как у нас есть порядковый номер пользователя в таблице(id), то обновляем записи этих id и устанавливаем
        #  user_status в normal
        print(f'Статус blocked изменен на normal для следуещего пользователя {user_id}')
    
    conn.commit()
    conn.close()
    Ответ написан
    Комментировать
  • Как работать с sqllite в конкурентных запросах?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Поделитесь пожалуйста опытом или примером
    Использовать более подходящие инструменты, например, MySQL.
    Ответ написан
  • Как сделать рассылку в aiogram?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Что-то мне кажется, что в строке
    await bot.send_message(chat_id=message.from_user.id,
    должно быть вместо message.from_user.id - id пользователя из базы.
    Дайте угадать - вам сообщение приходит столько раз, сколько пользователей в базе?
    Ответ написан
  • Почему не добавляет в таблицу sqlite3?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Вы не весь код предоставили, поэтому точного ответа нет!
    Вот так работает(и sql - обычно называют строку запроса, а не курсор):
    import sqlite3
    
    conn = sqlite3.connect('Core.db')
    cursor = conn.cursor()
    
    cursor.execute("""CREATE TABLE IF NOT EXISTS properties (
    	serverid INT,
    	MUsers BIGINT,
    	TERMS boolean,
    	Blocked boolean
      )""")
    
    serverid = 1
    
    cursor.execute(f"INSERT INTO properties VALUES (?,?,?,?)", ( serverid , '9999999999999999',False,False))
    
    conn.commit()
    conn.close()
    Ответ написан
    Комментировать
  • Ошибка запроса SQLite?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Уберите запятую после datetime INTEGER
    Ответ написан
    4 комментария
  • Ошибка при работе с Sqlite.Поможите исправить?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    В строке
    cur.execute("INSERT INTO data VALUES(?,?,?)", (item, ))
    кроме item должны быть еще 2 параметра.
    Вы вообще в курсе как работают списки, sqlite?

    Думаю, вместо этого:
    list = [login,email,password1]
    if password2 == password1:
    for item in list:
    print(item)
    cur.execute("INSERT INTO data VALUES(?,?,?)", (item, ))
    conn.commit()

    должно быть что-то вроде:
    if password2 == password1:
    	cur.execute("INSERT INTO data VALUES(?,?,?)", (login,email,password1,)) # Только поменять параметры местами
    	conn.commit()
    Ответ написан
    Комментировать
  • Как открыть файл .db через sqlite(на mac)?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Ответ написан
    Комментировать
  • Как вывести все таблицы из бд sqlite3?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    import sqlite3
    
    conn = sqlite3.connect('my.db')
    cursor = conn.cursor()
    
    cursor.execute("""select * from sqlite_master
    						where type = 'table'""")
    tables = cursor.fetchall()
    
    for table in tables:
    	print(table) # информация о таблицах
    	print(table[1]) #названия тадлиц
    Ответ написан
    Комментировать
  • Как выводить данные пополняющиеся в реальном времени в базу данных sqlite?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Вот простой код, который и выводит данные на страницу, и заносит их в базу:
    import sqlite3
    import time
    from datetime import datetime
    
    conn = sqlite3.connect('events.db')
    cursor = conn.cursor()
    
    sql = """CREATE TABLE IF NOT EXISTS events(id INTEGER PRIMARY KEY AUTOINCREMENT,
                                            page int,
                                            status text,
                                            date text)"""
    
    cursor.execute(sql)
    
    def add_event(page,status): # Метод добавления в базу: page - номер текущей страници, status - OK или ERROR
        date_now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        cursor.execute("INSERT INTO events VALUES(?,?,?,?)",(None, page, status, date_now))
        conn.commit()
        pass
    
    
    max_page = 5
    
    for page in range(1,max_page+1):
        try:
            # Тут сам парсинг, или метод парсинга
            print(f'Завершено скачивание данных {str(page)} из {str(max_page)} страниц')
            add_event(page,'OK')
            time.sleep(0.5)
        except:
            print(f'Ошибка парсинга на странице {page}')
            add_event(page,'ERROR')
    
    conn.close()

    PS: Изначально в вопросе о Pyqt5 речи не было.
    Ответ написан
  • Как вставить параметры в SQL запрос?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Как то так:
    cursor.execute("""INSERT INTO название_таблици (title, age, gender, nationality) VALUES(?,?,?,?)""",(name, age, male, counre, ))

    Возможны мелкие ошибки, так как не проверял.
    Ответ написан
    6 комментариев
  • Почему не заполняется БД?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    После cur.execute... нужно добавить conn.commit()
    Ответ написан
    7 комментариев
  • В чём ошибка при замене?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    cur.execute("UPDATE telebot228 SET name=? WHERE id =?",(jo,g))
    Модуль sqlite — Работаем с базой данных

    telebot228
    А Юля у вас клиент, или закладчица?

    Надеюсь вы не дилер, не хочу чтобы меня менты приняли за соучастие(
    Ответ написан
    Комментировать
  • Как изменить значение SQLITE_THREADSAFE?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Использование SQLite в многопоточных приложениях

    SQLite может быть собран в однопоточном варианте (параметр компиляции SQLITE_THREADSAFE = 0).

    В этом варианте его нельзя одновременно использовать из нескольких потоков, поскольку полностью отсутствует код синхронизации. Зачем? Для бешеной скорости.

    Проверить, есть ли многопоточность можно через вызов sqlite3_threadsafe(): если вернула 0, то это однопоточный SQLite.

    По умолчанию, SQLite собран с поддержкой потоков (sqlite3.dll).

    Есть два способа использования многопоточного SQLite: serialized и multi-thread.

    Serialized (надо указать флаг SQLITE_OPEN_FULLMUTEX при открытии соединения). В этом режиме потоки могут как угодно дергать вызовы SQLite, никаких ограничений. Но все вызовы блокируют друг друга и обрабатываются строго последовательно.

    Multi-thread (SQLITE_OPEN_NOMUTEX). В этом режиме нельзя использовать одно и то же соединение одновременно из нескольких потоков (но допускается одновременное использование разных соединений разными потоками). Обычно используется именно этот режим.

    SQLite — замечательная встраиваемая БД (часть 3)

    Возможно потребуется пересборка. Но там нет ничего сложного.
    Ответ написан
    1 комментарий
  • Как передать данные из бота в бд?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    Используйте MySQL.
    Ответ написан