如何使用此python脚本避免使用硬编码的sql表达式?

时间:2018-03-19 19:07:13

标签: python postgresql raspberry-pi sql-injection psycopg2

简而言之,我从覆盆子pi上的NRF24传感器获取一些数据然后将它们写入数据库。根据Codacy的说法,我需要避免使用硬编码的sql表达式,但我不知道我的脚本有什么问题。你可以帮我吗?

{{1}}

1 个答案:

答案 0 :(得分:0)

基于psycopg文档(http://initd.org/psycopg/docs/usage.html),cursor.execute()可以使用2个参数,SQL语句和将插入的一系列值。以这种方式构造insert语句让psycopg转换为python正确地对DB格式赋值,并提供对SQL注入攻击的保护:

...
log="INSERT INTO LOGS (HUMIDITY,TEMPERATURE,PRESSURE,AIR_QUALITY,READING_TIME,LOG_TIME,BASE_STATION_ID) VALUES (%s, %s, %s, %s, %s, %s, %s);"
vals = values[:4] + [datetime.now(),datetime.now(), 1]
write_to_db(log, vals)
...
def write_to_db(LOG, vals):
try:
    con = psycopg2.connect(database='dname', user='uname', password='pass')
    con.cursor().execute(LOG, vals)
    con.commit()
...