改进SQL INSERT查询以避免SQL注入 - python

我正在使用pymyql / mysql-connector将消息写入mysql数据库。消息是在mqtt broker的回调(paho.mqtt回调)上处理的。我有4个不同的表,并且根据消息类型,我正在将消息插入数据库。我写了如下的插入查询。这种写法似乎导致sql注入。任何建议如何改善插入查询语句?

# callback attached to paho.mqtt.client    
def on_message(self, client, userdata, msg):

    if  msg.topic.startswith("topic1/"):
        self.bulkpayload += "(" + msg.payload.decode("utf-8") + "," + datetime + "),"
    elif msg.topic.startswith("topic2/"):
        self.insertStatement += "INSERT INTO mydatabase.table1 VALUES (" + msg.payload.decode("utf-8") + "," + datetime + ");"
    elif msg.topic.startswith("topic3/")   
        self.insertStatement += "INSERT INTO mydatabase.table2 VALUES (" +msg.payload.decode("utf-8") + "," + datetime + ");"
    elif msg.topic.startswith("messages"):
        self.insertStatement += "INSERT INTO mydatabase.table3 VALUES ('" + msg.topic + "',"  + msg.payload.decode("utf-8") + "," + datetime + ");"
    else:
    return  # do not store in DB

    cursor.execute(self.insertStatement)
    cursor.commit()

python参考方案

使查询使用参数。注射机会少得多:

cursor.execute("INSERT INTO table VALUES (%s, %s, %s)", (var1, var2, var3))

信用(以及更多信息)在这里:How to use variables in SQL statement in Python?

另外,Dan Bracuk是正确的-如果还没有执行SQL,请确保在执行SQL之前先验证参数

用大写字母拆分字符串,但忽略AAA Python Regex - python

我的正则表达式:vendor = "MyNameIsJoe. I'mWorkerInAAAinc." ven = re.split(r'(?<=[a-z])[A-Z]|[A-Z](?=[a-z])', vendor) 以大写字母分割字符串,例如:'我的名字是乔。 I'mWorkerInAAAinc”变成…

查找字符串中的行数 - python

我正在创建一个python电影播放器​​/制作器,我想在多行字符串中找到行数。我想知道是否有任何内置函数或可以编写代码的函数来做到这一点:x = """ line1 line2 """ getLines(x) python大神给出的解决方案 如果换行符是'\n',则nlines …

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

字符串文字中的正斜杠表现异常 - python

为什么S1和S2在撇号位置方面表现不同?S1="1/282/03/10" S2="4/107/03/10" R1="".join({"N\'" ,S1,"\'" }) R2="".join({"N\'…

Pycharm失去了视图和模板之间的连接 - python

有一天,我发现一个Django应用程序失去了视图和模板之间的连接。我检查了整个项目,此问题仅得到一个应用程序。函数和模板之间的视图没有连接。模板中没有突出显示代码,模板中没有代码完成,并且模板无法识别标签,例如:{% url%}, <script src="{% static '...'%}"> </…