如何使用python execute在sql语句内部使用十六进制(x“”)?

2024-04-25 23:33:54 发布

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

我正在使用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))的原因