You need to enable JavaScript to run this app. 使用Python+MySQL查询2021年gpsdata表数据出现报错该如何解决
优惠活动
大模型
产品
解决方案
定价
更多

使用Python+MySQL查询2021年gpsdata表数据出现报错该如何解决

问题解决办法

报错原因说明

  • 第一次报错AttributeError: 'tuple' object has no attribute 'cursor'核心是pd.read_sql_query的参数顺序传反了:该函数第二个参数要求传入数据库连接对象,第三个参数才是SQL占位符对应的参数值。你把日期参数元组放在了第二个位置,pandas把这个元组识别为连接对象调用cursor方法,自然报错。
  • 第二次报错execute command denied to user 'himani'@'%' for routine 'dt.date'是因为你把Python侧的dt.date方法直接写在了SQL语句中,数据库执行SQL时无法识别Python的模块方法,抛出了误导性的权限不足错误,并非你真的没有查询权限。

正确代码示例

首先要确保你使用的dbconnect是有效的数据库连接对象(不是包含连接、游标的元组,如果之前创建连接时返回的是元组,提取出其中的连接对象即可),然后按如下写法调整:

import pandas as pd
import datetime as dt

# 若你的dbconnect是(连接对象, 游标)格式的元组,先提取连接对象:
# conn = dbconnect[0]
# 若dbconnect本身就是连接对象,直接用即可

start_date = dt.date(2021, 1, 1)
end_date = dt.date(2022, 1, 1)

# 按正确顺序传参
df_gpsdata = pd.read_sql_query(
    '''
    SELECT date, car_id, disance_km
    FROM fleet_gpsdata
    WHERE date >= %s AND date < %s
    ''',
    con=dbconnect,
    params=(start_date, end_date)
)

# pd.read_sql_query已经返回DataFrame,无需重复封装,直接排序即可
df_gpsdata.sort_values(by=["date"], inplace=True, ignore_index=True)

额外说明

如果你的数据库不支持%s格式的占位符(比如Oracle用:1、SQL Server用?),对应调整占位符格式即可,参数化查询的写法可以避免SQL注入风险,不推荐直接把日期拼接到SQL字符串中执行。

内容的提问来源于stack exchange,提问作者Karan Saraogi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 14:15:03