函数计算 Python 连接 SQL Server 小结

Posted 阿里云云栖号

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了函数计算 Python 连接 SQL Server 小结相关的知识,希望对你有一定的参考价值。

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 的测试文件,以验证数据库访问是否成功。



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


函数计算 Python 连接 SQL Server 小结


使用 homebrew 安装 mssql 客户端 sqlcmd。


函数计算 Python 连接 SQL Server 小结


创建测试数据库 TestDB。


函数计算 Python 连接 SQL Server 小结


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


函数计算 Python 连接 SQL Server 小结


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


准备一个测试函数


函数计算 Python 连接 SQL Server 小结


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


最新版的 pymssql


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


函数计算 Python 连接 SQL Server 小结


  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 目录下。


函数计算 Python 连接 SQL Server 小结


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


早期版本的 pymssql


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


函数计算 Python 连接 SQL Server 小结


  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 版本开始已经不需要源码安装了。



测试通过。


小结


这是一份来迟的函数计算使用 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/



end

更多精彩

以上是关于函数计算 Python 连接 SQL Server 小结的主要内容,如果未能解决你的问题,请参考以下文章

将多行连接成单行并计算 SQL Server 中连接的行数

python Python,SQL Server - 连接并获取数据

python 连接 SQL Server 数据库

python 连接SQL SERVER 并读取其数据

SQL Server外连接内连接交叉连接

python连接SQL Server数据库