我总是无法从我的电报机器人向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的数据)
1条答案
按热度按时间gj3fmq9x1#
这不是向表中插入数据的正确方法。尽管您的方法可能有效,但它不安全,而且缺少数据转义(
'
,"
,等等):许多数据类型的sql表示常常不同于它们的python字符串表示。典型的例子是字符串中的单引号:在sql中,单引号用作字符串文本分隔符,因此必须对字符串本身中出现的单引号进行转义,而在python中,如果字符串由双引号分隔,则可以不转义单引号。
由于数据类型表示法之间的差异(有时很微妙),naï查询字符串组合的ve方法,例如使用python字符串连接,是解决可怕问题的良方。
如果包含要发送到数据库的数据的变量来自不受信任的源(如网站上发布的表单),攻击者很容易生成格式错误的字符串,从而访问未经授权的数据或对数据库执行破坏性操作。这种形式的攻击称为sql注入,已知是对数据库服务器最广泛的攻击形式之一。在继续之前,请把这一页打印成备忘录并挂在table上。
所以在你的情况下
INSERT
语句应如下所示:进一步阅读:
mysql文档及示例
postgresql的类似文章(包含对潜在问题的更好解释)