Python 如何在bot中插入日期

Python 如何在bot中插入日期,python,mysql,telegram-bot,Python,Mysql,Telegram Bot,我总是无法从电报机器人向Mysql数据库插入数据,并且总是运行异常。只有tanggald始终无法插入。我发现日期插入查询的格式错误。如何编写正确的格式 tanggald列详细信息:数据类型=日期 这是一段代码: def process_lanjut(message): try: chat_id = message.chat.id qlanjut = message.text user = user_dict[chat_id]

我总是无法从电报机器人向Mysql数据库插入数据,并且总是运行异常。只有
tanggald
始终无法插入。我发现日期插入查询的格式错误。如何编写正确的格式

tanggald
列详细信息:数据类型=日期

这是一段代码:

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(应该插入到tanggald的数据)

这不是将数据插入表的正确方法。虽然您的方法可能有效,但它不安全,并且缺少数据转义(
,等等):

许多数据类型的SQL表示形式通常不同于它们的Python字符串表示形式。典型的例子是字符串中的单引号:在SQL中,单引号用作字符串文字分隔符,因此必须转义字符串本身中出现的单引号,而在Python中,如果字符串g由双引号分隔

由于数据类型表示之间的差异(有时是细微的差异),一种幼稚的查询字符串组合方法(例如使用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)

进一步阅读:

  • (包含对潜在问题的更好解释)


  • 您的错误消息在哪里?我没有初始化特定的错误消息。我只在出现错误时发送'oops lanjut'。因为tanggald,查询不会在@Sean执行