【问题标题】:Sql api is not supported for this database Error此数据库不支持 Sql api 错误
【发布时间】:2019-09-26 23:48:14
【问题描述】:

我正在尝试通过 Python 使用 Cdata ODBC 在 Cosmo DB Mongo API 中执行查询。下面是驱动配置:

[CData ODBC Driver for Cosmos DB]
Description=CData ODBC Driver for Cosmos DB 2019
Driver=/opt/cdata/cdata-odbc-driver-for-cosmosdb/lib/libcosmosdbodbc.x86.so
UsageCount=1
Driver64=/opt/cdata/cdata-odbc-driver-for-cosmosdb/lib/libcosmosdbodbc.x64.so

这是我用来进行查询的代码:

import pyodbc

cnxn = pyodbc.connect("DRIVER={CData ODBC Driver for Cosmos DB};AccountEndpoint=https://[myhost].com:443/;AccountKey=[mypass];")
cursor = cnxn.cursor()

# Find Schemas
cursor.tables()
for (catalog, schema, table, table_type, description) in cursor:
    print("Catalog: {}, Schema: {}, Table: {}, Type: {}".format(
        catalog, schema, table, table_type
    ))

# Execute Query  
cursor.execute("SELECT luistest from luistest")
rows = cursor.fetchall()
for row in rows:
  print(row.luistest)

当我执行它时,表和方案的查询返回良好,但是当我查阅文档时收到以下错误:

Catalog: CData, Schema: luis-test, Table: luistest, Type: TABLE
Traceback (most recent call last):
  File "mongo_odbc_test.py", line 11, in <module>
    cursor.execute("SELECT luistest from luistest")
pyodbc.Error: ('HY000', '[HY000] [Forbidden] Sql api is not supported for this database account\r\nActivityId: 66808c80-83b6-4694-99ac-295693b8f51d, Microsoft.Azure.Documents.Common/2.5.1.  (-1) (SQLExecDirectW)')

我有一个学生 Azure 帐户,这会影响吗?是否可以使用此工具在没有 SQL 的情况下进行查询?

谢谢。

【问题讨论】:

    标签: odbc azure-cosmosdb pyodbc unixodbc azure-cosmosdb-sqlapi


    【解决方案1】:

    这个工具似乎在使用 SQL API 来运行 SQL 查询。 如果您的 Cosmos DB 帐户使用的是 Mongo API,那么您应该使用使用 Mongo API 的工具和驱动程序。

    如果您打算将此工具用作主要开发/用例,我认为 Mongo API 帐户可能不是正确的选择,因为您没有 Mongo 要求,只需创建一个 SQL (Core) API 帐户。

    【讨论】:

    • 我了解,也许您知道我可以连接到 CosmosDB Mongo API 的任何 ODBC?
    • 您尝试过 MongoDB ODBC 驱动程序吗? docs.mongodb.com/bi-connector/master/reference/odbc-driver
    • 似乎更容易使用适当的 api 创建它?
    • 我正在阅读Azure documentation,它说只有 SQL API 数据库支持 ODBC
    • 因此是我最初的评论。选择 Mongo API 的原因是什么?您是否有任何应用程序或架构要求来选择 Mongo API? SQL (Core) API 也是文档/NoSQL。