Pandas读取SQL报错:如何正确查询特定ID的最后一行数据?
问题解决建议
错误原因
SQL中TEXT类型的字段值必须用引号包裹,你写的ID = AA34234234234234234234会被数据库识别为标识符(如列名、表名),而非字符串值,因此触发语法错误。
修正方案
1. 给字符串值添加引号
直接在SQL语句中给ID值加上单引号(或双引号):
# 单引号写法(外层用双引号包裹SQL语句) status = pd.read_sql("SELECT * FROM table WHERE ID = 'AA34234234234234234234'", database).tail(1) # 双引号写法(外层用单引号包裹SQL语句) status = pd.read_sql('SELECT * FROM table WHERE ID = "AA34234234234234234234"', database).tail(1)
2. 更高效的SQL查询(推荐)
不要先查询所有符合条件的数据再用tail(1),直接在SQL层面排序后取最后一行,减少数据传输量:
# 假设Timestamp字段可作为排序依据,按降序取第一条 status = pd.read_sql("SELECT * FROM table WHERE ID = 'AA34234234234234234234' ORDER BY Timestamp DESC LIMIT 1", database)
3. 安全的参数化查询(适用于动态ID值)
如果ID是变量而非固定值,建议用参数化查询避免SQL注入:
target_id = 'AA34234234234234234234' # sqlite用?作为占位符,其他数据库可能用%s等 status = pd.read_sql("SELECT * FROM table WHERE ID = ? ORDER BY Timestamp DESC LIMIT 1", database, params=(target_id,))
内容的提问来源于stack exchange,提问作者Dalalama231123
相关产品推荐
相关产品推荐

