运行 来自 python 的 SAP Hana 查询时出现编程错误

ProgrammingError when running a SAP Hana query from python

我使用 sqlalchemy 连接到 SAP Hana

_dsn='dsn'
conn_str = 'mssql+pyodbc://@{dsn}'.format(dsn=_dsn)
engine = sa.create_engine((conn_str)

然后我有一个使用 运行() 函数的 python 文件。

def run(engine):
    """
    TBD
    """

    query = 
          """
        SELECT
           "CalendarDay",
           "Score"
        FROM "Table"
        WHERE  "PEvent" = ''H'' OR "PEvent" = ''T''
        ORDER BY "CalendarDay" DESC, "Score" ASC
            """
    result = pd.read_sql(query, engine)
    return result

这是我收到的第 2 条错误消息:

ProgrammingError: ('42000', '[42000] [SAP AG][LIBODBCHDB SO][HDBODBC] Syntax error or access violation;257 sql syntax error: incorrect syntax near "H": line 5 col 25 (at pos 328) (257) (SQLExecDirectW)')

ProgrammingError: (pyodbc.ProgrammingError) ('42000', '[42000] [SAP AG][LIBODBCHDB SO][HDBODBC] Syntax error or access violation;257 sql syntax error: incorrect syntax near "H": line 15 col 25 (at pos 328) (257) (SQLExecDirectW)') [SQL: '\n SELECT\n "CalendarDay",\n "Score",\n FROM "Table"\n WHERE "PEVENT" = \'\'H\'\' OR "PEVENT" = \'\'T\'\'\n ORDER BY "CalendarDay" DESC, "Score" ASC\n']

我的猜测是 H 和 T 旁边的那些反斜杠造成了这个问题。 因为我们在查询的开头有一个 ' 那么 \'H 前面的 ' 关闭字符串。

不幸的是,我找不到正确的方法来编写我的 python 代码以便 SAP Hana 可以读取它。

我找到了一种不同的连接方式来处理这个问题。

conn = pyodbc.connect(DSN='dsn')
cursor = conn.cursor()
cursor.execute(query)
rows = cursor.fetchall()

查询中的此连接句柄字符串问题。