• Sqlite - как добавить текст в ячейку бд, если в нем могут содержаться и одинарные, и двойные кавычки?

    Vindicar
    @Vindicar
    RTFM!
    А всего-то нужно прочитать документацию. Там этот случай описан, и показано, как делать правильно.
    con = sqlite3.connect(":memory:")
    cur = con.execute("CREATE TABLE lang(name, first_appeared)")
    
    # This is the named style used with executemany():
    data = (
        {"name": "C", "year": 1972},
        {"name": "Fortran", "year": 1957},
        {"name": "Python", "year": 1991},
        {"name": "Go", "year": 2009},
    )
    cur.executemany("INSERT INTO lang VALUES(:name, :year)", data)
    
    # This is the qmark style used in a SELECT query:
    params = (1972,)
    cur.execute("SELECT * FROM lang WHERE first_appeared = ?", params)
    print(cur.fetchall())
    Ответ написан
    5 комментариев
  • Aiogram - как отправить фото из sqlite пользователю не сохраняя на диск?

    @puzaka
    При отправке фото/файла боту, это фото/файл сохраняется на сервера телеграмма, и каждого такого файла есть свой file_id. Пример эхо бота, который присылает этот file_id, если прислать ему фото/файл:
    @dp.message_handler(content_types=[ContentType.PHOTO, ContentType.DOCUMENT])
    async def echo(message: Message):
        try:  # если отправил фото
            await message.answer(message.photo[-1].file_id)  # прислать ID фото
        except:  # если отправил файл
            await message.answer(message.document.file_id)  # прислать ID файла


    Для начала нужно записать этот file_id в базу данных, это можно сделать вот так:
    import sqlite3
    
    connect = sqlite3.connect("name_of_your_db.db")
    cursor = connect.cursor()
    
    def AddTaskToDB(file_id):
        try:
            cursor.execute("INSERT OR IGNORE INTO `name_of_your_table` (`name_of_column`) VALUES(?)", (file_id))
            connect.commit()
        except sqlite3.Error as error:  # ошибка
            print(f'Error: {error}')


    Затем получить file_id из базы данных:
    import sqlite3
    
    connect = sqlite3.connect("name_of_your_db.db")
    cursor = connect.cursor()
    
    def GetFileID():
        try:
            file_id = cursor.execute("SELECT `name_of_column` FROM `name_of_your_table`", ).fetchall()[0][0]
            return file_id
        except sqlite3.Error as error:  # ошибка
            print(f'Error: {error}')
            return "error"


    Ну и чтобы отправить этот файл:
    @dp.message_handler()
    async def sendPhoto(message: types.Message):
        try:  # если file_id - это фото
            await message.answer_photo(GetFileID, 'описание фотографии')
        except:  # если file_id - это документ
            await message.answer_document(GetFileID, 'описание документа')
    Ответ написан
    1 комментарий