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

python连接数据库SQLServer


python连接数据库SQLServer


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

连接数据库的几种方式

  • python odbc
  • pymssql

连接数据库的几种方式

  • python odbc
  • pymssql

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

whl如何安装

whl类似于离线安装包,需要使用pip安装。
pip install指令就可以安装。

whl如何安装

whl类似于离线安装包,需要使用pip安装。
pip install指令就可以安装。

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

pymssql连接SQL Server读取中文程序“UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-2: ordinal not in range(128)”

原因
python默认使用unicode编码,编码不一致问题导致。
解决办法
找到python安装目录下Lib目录,site.py文件,找到setencoding函数
if 0:
# Enable to support locale aware default string encodings.
修改”if 0″为”if 1″就可以了

    def setencoding():
    """Set the string encoding used by the Unicode implementation.  The
    default is 'ascii', but if you're willing to experiment, you can
    change this."""
    encoding = "ascii" # Default value set by _PyUnicode_Init()
    if 0:
        # Enable to support locale aware default string encodings.
        import locale
        loc = locale.getdefaultlocale()
        if loc[1]:
            encoding = loc[1]
    if 0:
        # Enable to switch off string to Unicode coercion and implicit
        # Unicode to string conversion.
        encoding = "undefined"
    if encoding != "ascii":
        # On Non-Unicode builds this will raise an AttributeError...
        sys.setdefaultencoding(encoding) # Needs Python Unicode build !

pymssql连接SQL Server读取中文程序“UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 0-2: ordinal not in range(128)”

原因
python默认使用unicode编码,编码不一致问题导致。
解决办法
找到python安装目录下Lib目录,site.py文件,找到setencoding函数
if 0:
# Enable to support locale aware default string encodings.
修改”if 0″为”if 1″就可以了

    def setencoding():
    """Set the string encoding used by the Unicode implementation.  The
    default is 'ascii', but if you're willing to experiment, you can
    change this."""
    encoding = "ascii" # Default value set by _PyUnicode_Init()
    if 0:
        # Enable to support locale aware default string encodings.
        import locale
        loc = locale.getdefaultlocale()
        if loc[1]:
            encoding = loc[1]
    if 0:
        # Enable to switch off string to Unicode coercion and implicit
        # Unicode to string conversion.
        encoding = "undefined"
    if encoding != "ascii":
        # On Non-Unicode builds this will raise an AttributeError...
        sys.setdefaultencoding(encoding) # Needs Python Unicode build !

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

$ docker pull mcr.microsoft.com/mssql/server:2017-latest$ docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Codelife.me'  -p 1433:1433 --name sql1  -d mcr.microsoft.com/mssql/server:2017-latest

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

$ brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release$ brew update$ ACCEPT_EULA=y brew install --no-sandbox msodbcsql mssql-tools

使用 homebrew 安装 mssql 客户端 sqlcmd。

$ sqlcmd -S localhost -U SA -P 'Codelife.me'1>CREATE DATABASE TestDB2>SELECT Name from sys.Databases3>GOName-----------------------------------------------mastertempdbmodelmsdbTestDB(5 rows affected)

创建测试数据库 TestDB。

1> USE TestDB2> CREATE TABLE Inventory (id INT, name NVARCHAR, quantity INT)3> INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);4> GOChanged database context to 'TestDB'.(1 rows affected)(1 rows affected)

发表评论

电子邮件地址不会被公开。 必填项已用*标注