Как вставить дату mysql python telegrambot

0

Я всегда старался вставлять данные в базу данных Mysql из моего бота телеграммы и всегда запускать Exception. Только tanggald всегда не удалось вставить. Я неверный формат запроса даты вставки. Как написать правильный формат?

tanggald столбца tanggald: Тип данных = DATE

Это фрагмент кода:

def process_lanjut(message):
    try:
        chat_id = message.chat.id
        qlanjut = message.text
        user = user_dict[chat_id]
        user.qlanjut=qlanjut

        d = datetime.datetime.now().date()
        next_monday = next_weekday(d, 4) 
        user.next_monday = next_monday
        print(user.next_monday)

        with con.cursor() as cursor:
            sql = "INSERT INTO diagnosa(sex, tanggald) VALUES('" + user.sex + "','" +next_monday+ "')"
            cursor.execute(sql)

        con.commit()
        con.close()

        msg = bot.send_message(chat_id, 'thanks')
        bot.register_next_step_handler(msg, send_end)

    except Exception as e:
        bot.reply_to(message,'oops lanjut')

На выходе командной строки: 2018-04-20 (данные, которые должны быть INSERT для tanggald)

  • 1
    Где ваше сообщение об ошибке?
  • 0
    Я не инициализировал конкретное сообщение об ошибке. Я только посылаю 'упс ланют', когда есть ошибка. потому что tanggald, запрос не выполняется @Sean
Теги:
telegram-bot

1 ответ

1

Это не правильный способ вставки данных в таблицу. Хотя ваш способ может работать, он небезопасен и ему не хватает данных (', " и т.д.):

SQL-представление многих типов данных часто отличается от представления строки Python. Типичный пример: одинарные кавычки в строках: в одиночных кавычках SQL используются в качестве строковых литералов-разделителей, поэтому те, которые появляются внутри самой строки, должны быть экранированы, тогда как в одиночных кавычках Python могут быть оставлены без сохранения, если строка разделена двойными кавычками,

Из-за различий, когда-то тонких, между представлениями типов данных, наивный подход к составлению строк запросов, например, использование конкатенации строк Python, является рецептом для ужасных проблем.

Если переменные, содержащие данные для отправки в базу данных, поступают из ненадежного источника (например, формы, опубликованной на веб-сайте), злоумышленник может легко создать неверную строку, либо получить доступ к неавторизованным данным, либо выполнить деструктивные операции с базой данных. Эта форма атаки называется SQL-инъекцией и, как известно, является одной из наиболее распространенных форм атаки на серверы баз данных. Прежде чем продолжить, распечатайте эту страницу в виде заметки и повесьте ее на свой стол.

Поэтому в вашем случае INSERT должна выглядеть так:

with con.cursor() as cursor:
    sql = 'INSERT INTO diagnosa (sex, tanggald) VALUES (%s, %s)'
    data = (user.sex, next_monday)
    cursor.execute(sql, data)

Дальнейшее чтение:

  1. Документы и примеры MySQL

  2. Подобная статья для PostgreSQL (содержит лучшее объяснение потенциальных проблем)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню