You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python SQLAlchemy查询时如何从datetime列提取年份

报错根因

你拿到的SyntaxError: invalid syntax是Python解释器抛出的,和数据库SQL逻辑无关:你用单引号作为整个SQL语句的包裹符,但是SQL语句内部表示格式参数的地方又用了单引号,Python解析到第一个内部单引号时就认为SQL字符串已经结束,后面的内容会被识别为非法Python代码,根本没走到数据库执行那一步。

先修复Python引号嵌套问题

两种改法选一种即可:

# 写法1:外层用双引号包裹整个SQL,内部SQL的字符串参数正常用单引号
pd.read_sql_query("SELECT YEAR(visits.visit_date) as year FROM visits", engine)

# 写法2:外层保留单引号,内部所有单引号前加反斜杠转义
pd.read_sql_query('SELECT YEAR(visits.visit_date) as year FROM visits', engine)
对应数据库选正确的年份提取SQL

修完引号问题后,根据你实际连接的数据库选对应函数即可,不要混用不同数据库的语法:

  • 连接MySQL、SQL Server:直接用内置YEAR()函数,写法为YEAR(visits.visit_date),不需要套FORMAT函数,不会因为格式字符串大小写、写法不匹配出问题
  • 连接PostgreSQL、Oracle:用EXTRACT()函数,固定语法是EXTRACT(YEAR FROM visits.visit_date),你之前写的extract(year, 字段)参数格式不对,这个函数要求必须写FROM关键字连接字段
  • 连接SQLite:用strftime()函数,写法为strftime('%Y', visits.visit_date)

你写的带filter(的那句是多余的拼写错误,没有任何数据库提取年份需要嵌套filter函数,直接删除这部分错误拼写即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 22:33:00