问题描述
在App Service中运行Pythoad8n编写的定时任务,需要使用pymssql连接到数据库,但是发现使用python.exe -m pip install –upgrade -r requirements.txt -t D:\\home\\site\\wwwroot\\pymodules。requirements.txt中包含pymssql库。安装时候出现错误消息: Failed to build pymssql.
问题答案
因为App Service上无法直接编译Python Package为Wheel文件,所以需要在本地编译好之后,上传到App Service中。使用PIP命令直接安装Wheel文件。操作步骤为:
1)从网络中下载 pymssql的wheel文件
在https://pypi.org/project/pymssql/2.1.5/#files 找到对应 Python 版本的安装模块,如:pymssql-2.1.5-cp36-cp36m-win_amd64.whl,下载到本地,然后上传到App Service的D:\\home\\site\\wwwroot目录。
可以直接将文件拖拽到这个目录下,操作如下:
2)在App Service的高级管理工具(Kudu)中进行安装
进入D:\\home\\python364x64目录,执行这个命令进行安装 pip install D:\\home\\site\\wwwroot\\pymssql-2.1.5-cp36-cp36m-win_amd64.whl
3)在Python的package文件夹中查看是否安装成功
安装成功之后,可以在这个目录D:\\home\\python364x64\\Lib\\site-packages查看到安装的包.
需要注意,执行Python的Webjob时,需要使用 .cmd 来启动 Python,指定自定义后的Python.exe的路径。
附录:pymssql 连接数据库代码
import time,datetime,dingtalk.api,pyodbcfrom sqlalchemy import create_engineimport pandas as pdserver=\"xxxx.database.windows.net\"database=\'xxx\' #数据库名称user=\"xxxx\" #登陆账号password=\"xxxxxxxxxxxxx\" #账号密码driver= \'{ODBC Driver 17 for SQL Server}\'conn=pyodbc.connect(\'DRIVER=\'+driver+\';SERVER=tcp:\'+server+\';PORT=1433;DATABASE=\'+database+\';UID=\'+user+\';PWD=\'+ password,encoding = \'utf-8\')sqlcmd=\"SELECT * FROM dbo.xxxxxxxxx\" #sql语句dataset=get_df_from_db_1(sqlcmd)S_sheet =[]S_sheet =pd.DataFrame(columns=(\'xxx\',\'xxx\',\'xxx\'))### ...### ...S_sheet=S_sheet.reset_index(drop=True)#存入数据库conn_engine=\'mssql+pyodbc://\'+user+\':\'+password+\'@\'+server+\'/\'+database+\'?driver=ODBC Driver 17 for SQL Server\'engine = create_engine(conn_engine)pd.io.sql.to_sql(S_sheet, \'xxx\', con=engine, index=False, if_exists=\'append\')print(\'Data:%s\'%len(S_sheet))conn.close()
参考资料
pymssql 2.1.5:https://pypi.org/project/pymssql/2.1.5/#files
Running Python Webjob on Azure App Services using non-default python version :https://azureossd.github.io/2016/12/09/running-python-webjob-on-azure-app-services-using-non-default-python-version/