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
相关产品推荐
相关产品推荐

