【问题标题】:How to ignore sql column names via Python?如何通过 Python 忽略 sql 列名?
【发布时间】:2018-03-22 14:37:43
【问题描述】:

我正在尝试通过 python 运行 sql 查询,但每次删除最后两行代码时,我都会收到一个我不理解的错误 - 下面的代码是我正在尝试运行的代码,这些是我删除的代码行:

1 - columnNames = [n.replace('b','') for n in list(results.columns.values)]

2 - results.columns = columnNames

import pyodbc
import pandas
cnxn = pyodbc.connect("DSN=XXX",autocommit=True)
sql = "select b.* from X.Y a inner join X.X b where a.tradeid = b.tradeid where a.productmaintypeid = 'InterestRateCapFloor' limit 10"
results = pandas.read_sql(sql, cnxn)

错误信息

DatabaseError: 执行失败 sql 'select b.* from trade.trades a inner join trade.legs b where a.tradeid = b.tradeid where a.productmaintypeid = 'InterestRateCapFloor' limit 10': ('HY000', “[HY000] [Cloudera][Hardy] (80) 执行查询时在服务器中引发语法或语义分析错误。来自服务器的错误消息:编译语句时出错:失败:ParseException 行 1:83 在 'where' 附近缺少 EOF tradeid' (80) (SQLExecDirectW)")

【问题讨论】:

  • 我们需要一个minimal reproducible example
  • 我们还能看到错误吗?甚至可能是代码?试着给我们一个MCVE
  • 和格式正确的代码:)
  • 我要添加正确的代码
  • DatabaseError: 执行失败 sql 'select b.* from trade.trades a inner join trade.legs b where a.tradeid = b.tradeid where a.productmaintypeid = 'InterestRateCapFloor' limit 10': ('HY000', "[HY000] [Cloudera][Hardy] (80) 执行查询时在服务器中引发语法或语义分析错误。来自服务器的错误消息:编译语句时出错:FAILED:ParseException line 1:83 缺少 EOF at 'tradeid' 附近的 'where' (80) (SQLExecDirectW)")

标签: python sql pandas pyodbc


【解决方案1】:

将您的 SQL 查询更改为

select b.* from trade.trades a inner join trade.legs b where a.tradeid = b.tradeid AND a.productmaintypeid = 'InterestRateCapFloor' limit 10 

基本上你需要删除额外的位置。

【讨论】:

  • 还要检查你的数据库是否支持limit关键字。
  • 大家好,非常感谢您的帮助。你是对的,这只是一个愚蠢的 sql 错误而不是 python 错误。现在排序!有无替换功能
猜你喜欢
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 2016-03-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多