使用 Python 3.11 在 Azure 函数中找不到 ODBC 驱动程序 18

问题描述 投票:0回答:1

我正在使用 Python 3.11 创建一个 Azure 函数,以通过

pyodbc
库将数据写入 Azure SQL 数据库。但是,我遇到了找不到 ODBC 驱动程序 18 的问题。我收到的错误消息是:

错误:('01000',“[01000] [unixODBC][驱动程序管理器]无法打开 lib 'ODBC Driver 18 for SQL Server':找不到文件 (0) (SQLDriverConnect)”)

我尝试过以下方法:

  1. 切换到 Python 3.10:使用 ODBC 驱动程序 18 时问题仍然存在,并且在使用 ODBC 驱动程序 17 时也会出现。
  2. 检查连接字符串:确保为驱动程序正确设置连接字符串。

环境:

  1. Azure Function 在基于 Linux 的计划上运行。
  2. 我尚未手动安装任何 ODBC 驱动程序,并且我不确定如何在 Azure 环境中执行此操作。但是,我的
    pyodbc
    文件中有
    azure-functions
    requirements.txt

有人遇到过类似的问题或者可以提供有关在此环境中为 Azure SQL 设置 ODBC 驱动程序的指导吗?

谢谢!

python azure-functions azure-sql-database odbc pyodbc
1个回答
0
投票

我创建了一个基于Linux的消费计划python函数,版本为

3.11

我在

ODBC Driver 17 for SQL Server
中遇到了
python 3.11
的错误,但是
ODBC Driver 18 for SQL Server
对我来说工作得很好。

Python 3.11 不支持

ODBC Driver 17
,3.10 不支持
ODBC Driver 18
。确保版本正确且驱动程序版本正确。

如果在3.11中仍然不起作用,我建议尝试使用3.12

下面给出的功能代码对我有用:

import azure.functions as func
import logging
import pyodbc


app = func.FunctionApp()


@app.route(route="http_trigger", auth_level=func.AuthLevel.ANONYMOUS)
def http_trigger(req: func.HttpRequest) -> func.HttpResponse:
      
    try:
        Connectionstring = "Driver={ODBC Driver 18 for SQL Server};Server=tcp:sqlserver31aug.database.windows.net,1433;Database=sqldb31aug;Uid={your username};Pwd={your password};Encrypt=yes;TrustServerCertificate=no;Connection Timeout=30;"
        with pyodbc.connect(Connectionstring) as conn:
            with conn.cursor() as cursor:
                cursor.execute("SELECT SYSTEM_USER;")
                result = cursor.fetchone()
                
                logging.info('Python HTTP trigger function processed a request.')
    
                logging.info("SYSTEM_USER: %s", result)

                return func.HttpResponse(f"SYSTEM_USER: {result}", status_code=200)
                
    except pyodbc.Error as e:
        logging.error(f"SQL query failed: {e}")
        return func.HttpResponse(f"SQL query failed: {e}")  

OUPUT

© www.soinside.com 2019 - 2024. All rights reserved.