'master..sysdatabases' 此版本的 SQL 服务器不支持

'master..sysdatabases' is not supported in this version of SQL Server

我正在尝试将我的 Flask 应用程序连接到 Azure 数据库,然后我遇到了这个错误。我在上面找不到任何内容,将不胜感激。

pypyodbc.connect(
    Driver={SQL Server};Server=tcp:******.net,1433;Database=***;UID=***;PWD=***;
)

问题是由您的组合引起的

  1. pypyodbc
  2. 古老的 ODBC 驱动程序名为 "SQL Server",并且
  3. 蔚蓝SQL

当 pypyodbc 尝试通过 pypyodbc.connect 建立连接时,它所做的其中一件(很多!)事情是尝试确定您是否对数据库具有只读或读写访问权限。它使用的 ODBC 调用被 "SQL Server" ODBC 驱动程序翻译为

select substring('NY',status/1024&1+1,1) from master..sysdatabases where name=DB_NAME()

Azure SQL 显然不喜欢。

相比之下,更现代的 ODBC 驱动程序,如 "ODBC Driver 11 for SQL Server" 将相同的 ODBC 调用转换为

SELECT CASE DATABASEPROPERTYEX( DB_NAME(), 'Updateability') WHEN 'READ_ONLY' THEN 'Y' ELSE 'N' END

这可能更适合 Azure SQL。

因此,您可以切换到更新的 ODBC 驱动程序,或者尝试使用 pyodbc 而不是 pypyodbc,因为 pyodbc 在连接时似乎不查询数据库的 RO/RW 状态。