我正在使用Python/Django和MySQL数据库。这个sql查询在我的工作台中运行良好
SELECT * FROM frontend_appliance_sensor_reading
WHERE id = (SELECT max(id) FROM frontend_appliance_sensor_reading WHERE sensor_id = hex(x'28E86479972003D2') AND
appliance_id = 185)
我正在返回传感器的最新记录。十六进制字符串是我需要在python中作为变量传入的传感器ID
下面是我的python函数,它将返回这个对象
def get_last_sensor_reading(appliance_id, sensor_id):
dw_conn = connection
dw_cur = dw_conn.cursor()
appliance_id_lookup = appliance_id
dw_cur.execute('''
SELECT * FROM frontend_appliance_sensor_reading as sr
WHERE id = (SELECT max(id) FROM frontend_appliance_sensor_reading WHERE sensor_id = hex(x{sensor_id_lookup}) AND
appliance_id = {appliance_id_lookup})
'''.format(appliance_id_lookup=appliance_id_lookup, sensor_id_lookup = str(sensor_id)))
values = dw_cur.fetchall()
dw_cur.close()
dw_conn.close()
print values
但是,它似乎用如下变量表示x: (1054,“where子句”中的未知列“x9720032F0100DE86”)
我尝试了各种字符串组合,以使其正确执行,但没有运气。我错过了什么?x实际上被解释为str吗?或者我应该先把它转换成别的东西
此外,我不能使用Django的ORM,因为传感器id作为BLOB数据存储在二进制字段中。在Django中不能按BLOB数据进行筛选。这就是我使用sql命令而不是只执行SensorReading.objects.filter(sensor\u id=sensor.latest('id))的原因
目前没有回答
相关问题 更多 >
编程相关推荐