函数计算 Python 连接 SQL Server 小结

本文详细介绍如何在函数计算环境中配置和使用SQLServer数据库,包括使用pymssql模块的安装与依赖管理,以及在fc-docker中进行测试的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python 连接数据库通常要安装第三方模块,连接 MS SQL Server 需要安装  pymssql 。由于 pymsql 依赖于 FreeTDS,对于先于 2.1.3 版本的 pymssql,需要先安装 FreeTDS。由于早期版本的 pymssql 只提供了 windows 下的 wheel 打包,其他平台(如 linux)需要从源码包编译安装,那需要先安装 freetds-dev 包,以提供必要的头文件。


函数计算的 runtime 运行时的目录是只读的,所以对于需要使用 apt-get 和 pip 安装依赖的场景,需要将依赖安装在代码目录而不是系统目录。具体安装方法可以参考《函数计算安装依赖库方法小结》。而 pymssql 的老版本涉及到编译安装,比常见的二级制安装到本地目录略复杂一些。


函数计算依赖安装需要有个模拟的 linux 环境,从前我们推荐使用 fcli shell 的 sbox ,启动一个接近生产环境的 docker container 进行依赖安装。因为有些依赖是平台相关的,在 mac 系统安装的动态链接库无法在函数计算的 linux 环境下运行, pymssql 恰好属于这种情况。本文我将使用 fc-docker 进行安装和本地测试。


下面的例子是基于函数计算 runtime python3.6 的,对于 python2.7 也进行了测试,同样适用。


准备测试环境


首先使用 docker 在本机 Mac 电脑下运行一个 SQL Server 2017 服务,并初始化表结构,编辑一个 index.py 的测试文件,以验证数据库访问是否成功。


640?wx_fmt=png


将 SQL Server 启动于 1433 端口,并设定 SA 账户密码为 Codelife.me


640?wx_fmt=png


使用 homebrew 安装 mssql 客户端 sqlcmd。


640?wx_fmt=png


创建测试数据库 TestDB。


640?wx_fmt=jpeg


创建一张 Inventory 表,并参入一行测试数据。


640?wx_fmt=png


验证一下插入结果并退出。


准备一个测试函数


640?wx_fmt=png


编写一个测试函数 index.py。该函数连接 mac 宿主机docker.for.mac.host.internal (这里不能是 localhost,因为 fc-docker 会将函数运行在 container 内部)的 SQL Server 服务。执行一个查询,并把结果返回出来。


最新版的 pymssql


创建一个空目录,存放上 index.py 文件。将命令会话的当前路径切换到 index.py 所在的目录,然后执行


640?wx_fmt=jpeg


  1. 这里使用了 fc-docker 提供的 python3.6 的模拟环境:aliyunfc/runtime-python3.6

  2. 第一行启动了一个不会退出的 docker container,第二行使用 docker exec 进入这个 container 安装依赖,最后一行退出该 container。因为本地路径 $(pwd) 被挂载到 container 内部的 /code 目录,所以 container 退出以后 /code 目录的内容还会保留在本地当前路径下。

  3. pip 通过 -t 参数将 wheel 包安装在 /code 目录下。


640?wx_fmt=jpeg


执行上面命令可以顺利返回结果。对于不需要使用老本 pymssql  的用户看到这里就可以结束了。


早期版本的 pymssql


对于早于 2.1.3 版本的 pymssql, pip install 会触发源码编译安装,对于这种情况,需要安装编译时依赖的 freetds-dev,以及运行时依赖的 libsybdb5。编译时依赖可以直接安装在系统目录里,运行时依赖必须安装在本地目录下。


640?wx_fmt=jpeg


  1. 第一行启动一个 container,第十行停止并自动删除该 container。

  2. 第二行至第三行将运行时依赖 libsybdb5 安装于本地目录。

  3. 将动态链接库 libsybdb.so.5 链接到目录 /code/lib 目录下,因为该目录默认配置到了环境变量 LD_LIBRARY_PATH 下。

  4. 将 freetds-dev 和 cython 安装到系统目录,用于 pymssql 编译安装,因为运行时 pymssql 不需要这两个库,所以无需安装在本地目录

  5. 安装 2.1.3 版本的 pymssql,从 2.1.4 版本开始已经不需要源码安装了。


640?wx_fmt=jpeg


测试通过。


小结


这是一份来迟的函数计算使用 sql server 数据库的配置文档。当前版本的 pymssql 已经不再需要源码安装了。但是 pip 源码包安装的方法,对于其他类似的场景也是适用的。


本文也提供了一种基于 fc-docker 的配置和调试方法,不同 fcli 的 sbox,fc-docker 可以写成脚本反复执行,并且也可以用于本地模拟执行,对于 CI 场景非常有帮助。


参考阅读


http://www.pymssql.org/en/latest/intro.html#install

http://www.freetds.org/

http://www.pymssql.org/en/stable/pymssql_examples.html

https://docs.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-2017

https://cloudblogs.microsoft.com/sqlserver/2017/05/16/sql-server-command-line-tools-for-macos-released/


640?wx_fmt=jpeg


end

聊聊Flexbox布局中的flex的演算法

支付宝移动端动态化方案实践

阿里云总监课第四期:阿里褚霸携专家团独家分享弹性计算最佳实践

想入职阿里的Java开发者必看,阿里巴巴面试官实战经验分享!

更多精彩

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值