pyodbc。错误:('01000', “[01000] 在渲染上部署 Flask API 期间

pyodbc.Error: ('01000', "[01000] during deploy of a Flask API on Render

提问人:José Carlos 提问时间:11/16/2023 最后编辑:Brian Tompsett - 汤莱恩José Carlos 更新时间:11/17/2023 访问量:50

问:

我正在尝试在渲染 (render.com) 上部署 Flask Api,但出现错误:

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

我的代码作为本地主机运行(我的数据库是本地的),但在我尝试部署 API 时则不然。 代码如下所示:

from flask import Flask, jsonify, request
import pyodbc
from flask_pydantic_spec import FlaskPydanticSpec
from flask_cors import CORS

app = Flask(__name__)
spec = FlaskPydanticSpec('flask', title="Endpoints da api de consulta \
                         da Base Nacional Curricular Comum - BNCC")

spec.register(app)
cors = CORS(app, resources={r"/api/*": {"origins": "*"}})  

data_for_connection = (
    "Driver={ODBC Driver 17 for SQL Server};"
    "Server=DESKTOP-1698A6Q\SQLEXPRESS;"
    "Database=bncc;"
    "Trusted_connection=YES;"
)
connection = pyodbc.connect(data_for_connection)
cursor = connection.cursor()

@app.route('/diario/aluno/<id_student>', methods=['GET'])
def list_student_by_id(id_student):
    "Lista os dados de um estudante pelo id"
    db = cursor.execute(f"SELECT * FROM tabela_alunos where id_aluno = ?", (id_student,))
    query_data = db.fetchone()  # Use fetchone() to retrieve a single row

    if query_data is not None:
        student_data = {
            "nome": query_data[0],
            "sobrenome": query_data[1],
            "nome_completo": query_data[2],
            "ano": query_data[3],
            "nivel_ensino": query_data[4],
            "idade": query_data[5],
            "cpf": query_data[6],
            "turma": query_data[7],
            "id_aluno": query_data[8],
            "status_aluno": query_data[9]
            # "data_cadastro_aln": query_data[10]
        }
        return jsonify(data=student_data, message="Aluno solicitado")
    else:
        return jsonify(message="Aluno não encontrado"), 404
if __name__ == '__main__':
    app.run()

我的 ProcFile 设置如下:

网站: Gunicorn main:app

我的要求.txt是这样的:

blinker==1.7.0
click==8.1.7
colorama==0.4.6
Flask==3.0.0
Flask-Cors==4.0.0
flask-pydantic-spec==0.5.0
gunicorn==21.2.0
inflection==0.5.1
itsdangerous==2.1.2
Jinja2==3.1.2
MarkupSafe==2.1.3
packaging==23.2
pydantic==1.10.13
pyodbc==4.0.39
typing_extensions==4.8.0
Werkzeug==3.0.1

enter image description here

我尝试安装不同版本的 pyodbc,但在尝试部署它时仍然不起作用。 发生这种情况是因为我有本地数据库吗?

Python Flask 部署

评论

0赞 TanThien 11/16/2023
看,你确定服务器后端可以连接到这个服务器。在您的服务器中,您可以通过此 url ping 或 curl?Server=DESKTOP-1698A6Q\SQLEXPRESS
0赞 José Carlos 11/16/2023
它在当地主人中完美运作。它是一个具有多个端点的 API,即 RestApi。例如,我可以使用Postman的所有方法(delete,post,get,put)。如果你不介意的话,完整的代码在这里:github.com/carlosjuniorcosta1/api_bncc_nuvem .无论如何,谢谢。
0赞 TanThien 11/16/2023
这个错误不是来自你的代码,它变成了来自操作系统的库。在本地,您为操作系统安装了驱动程序 ODBC。但是在服务器中,它是干净的。尝试通过 learn.microsoft.com/en-us/sql/connect/odbc/linux-mac/ 为您的服务器安装驱动程序 ODBC...sudo apt install msodbcsql17
0赞 José Carlos 11/17/2023
我的电脑里有 odbc for windows (odbc 17)。我也不明白你把它放在服务器中的意思,因为我的数据库服务器是本地的。我在 Windows 上的源数据管理器(用户 DN、系统 DNS)中测试了连接。连接成功,但在 Render.com 上部署期间仍出现相同的错误。
0赞 TanThien 11/17/2023
在你的服务器 render.com,只有python lib接口,方便调用驱动程序msodbcsql。因此,需要为 render.com VM 安装驱动程序 msodbcsql17pyodbc

答: 暂无答案