Python-SQL语法

2024-04-20 00:44:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在我的raspberry pi上运行一个python脚本,以便将从gps接收器接收到的数据存储到sql表中。当我执行这个脚本时,我在代码的这一部分得到了一个错误:

sql = "INSERT INTO gps (n_lat, w_long, date_time) VALUES (%s, %s, %s)" % (north, west, t,)
print sql
cur.execute(sql)
print "Rows inserted: %s" % cur.rowcount
con.commit()
time.sleep(0.5)

错误:

^{pr2}$

我真的不明白问题出在哪里,你知道为什么会出现这种错误吗?在


Tags: 数据代码脚本sqltime错误piraspberry
2条回答

您在引号内设置值的SQL语句中的错误:

VALUES ('%s', '%s', '%s')

您没有转义输入值。日期数字可能不是可选的,但这个数字不是时间。在

但是,您应该始终对数据库的输入值进行转义。这里的关键字是准备语句。与其用pythons%运算符将输入参数解析为字符串,不如使用cursor.execute的参数列表。在

sql = "INSERT INTO gps (n_lat, w_long, date_time) VALUES (%s, %s, %s)"
print sql
cur.execute(sql, (north, west, t,))
print "Rows inserted: %s" % cur.rowcount
con.commit()
time.sleep(0.5)

现在函数execute将确保所有特殊字符都被转义。E、 g.你的一个输入值可能包含一个单引号或类似的。使用python的字符串解析,会产生如下结果:

^{pr2}$

在最好的情况下,这将导致数据库错误,在最坏的情况下,有人可以用自己的SQL语句(所谓的SQL injection)操作数据库。在

相关问题 更多 >