本人示例环境:python
- 系统版本:centos7.1 64位
- 数据库版本:SQL Server2012
- python版本:Python 3.6.3
- Django版本:Django2.1
- 链接数据库工具:pyodbc,Microsoft ODBC Driver
以前已经写过一篇《python3链接使用SQL Server数据库(linux版)》,但发现Django进行链接时仍是比较繁琐和头疼的,因此如今写个专门针对 linux + Django + SQL Server 组合的文章,在这里并无使用freetds驱动开源工具,而是使用了和Windows同样的Microsoft ODBC Driver 11 for linux版,微软专门为linux用户开发支持的SQL server 驱动linux
Microsoft ODBC Driver 11 for linux 下载地址[linux6和linux7通用,实测centos7可用]c++
wget http://download.microsoft.com/download/6/A/B/6AB27E13-46AE-4CE9-AFFD-406367CADC1D/Linux6/sqlncli-11.0.1790.0.tar.gz
若是你须要更高版本的驱动程序请转到官网下载,附官网地址(建议旧版安装成功后再选择性升级)sql
https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017
用于数据库链接的驱动数据库
yum -y install unixODBC*
tar xvf sqlncli-11.0.1790.0.tar.gz cd sqlncli-11.0.1790.0 ./install.sh verify
如下为验证信息django
Microsoft SQL Server ODBC Driver V1.0 for Linux Installation Script Copyright Microsoft Corp. Starting install for Microsoft SQL Server ODBC Driver V1.0 for Linux Checking for 64 bit Linux compatible OS ..................................... OK Checking required libs are installed ........................................ OK unixODBC utilities (odbc_config and odbcinst) installed ..................... OK unixODBC Driver Manager version 2.3.0 installed ......................... FAILED unixODBC Driver Manager configuration correct ...................... NOT CHECKED Microsoft SQL Server ODBC Driver V1.0 for Linux already installed .. NOT CHECKED See /tmp/sqlncli.10874.17476.965/install.log for more information about installation failures.
[root@localhost sqlncli-11.0.1790.0]# ldd lib64/libsqlncli* linux-vdso.so.1 => (0x00007fff973fe000) libcrypto.so.10 => /lib64/libcrypto.so.10 (0x00007f2deb899000) libdl.so.2 => /lib64/libdl.so.2 (0x00007f2deb695000) librt.so.1 => /lib64/librt.so.1 (0x00007f2deb48c000) libssl.so.10 => /lib64/libssl.so.10 (0x00007f2deb21a000) libuuid.so.1 => /lib64/libuuid.so.1 (0x00007f2deb015000) libodbcinst.so.1 => /lib64/libodbcinst.so.1 (0x00007f2deae02000) libkrb5.so.3 => /lib64/libkrb5.so.3 (0x00007f2deab1a000) libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x00007f2dea8cd000) libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f2dea5c4000) libm.so.6 => /lib64/libm.so.6 (0x00007f2dea2c2000) libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f2dea0ac000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2de9e8f000) libc.so.6 => /lib64/libc.so.6 (0x00007f2de9acc000) libz.so.1 => /lib64/libz.so.1 (0x00007f2de98b6000) /lib64/ld-linux-x86-64.so.2 (0x00007f2dec053000) libcom_err.so.2 => /lib64/libcom_err.so.2 (0x00007f2de96b1000) libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00007f2de947e000) libltdl.so.7 => /lib64/libltdl.so.7 (0x00007f2de9274000) libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00007f2de9065000) libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00007f2de8e61000) libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f2de8c47000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f2de8a1f000) libpcre.so.1 => /usr/local/lib/libpcre.so.1 (0x00007f2de8802000)
==若是遇到没有找到的依赖环境组件,不用担忧,依赖组件是向下兼容的,在这里我作个示例:==vim
若是你看到centos
libodbcinst.so.1 => not found
能够创建个此缺乏环境组件名称的软链接并指向此环境组件的高版本,如:api
cd /usr/lib64 ln -s libodbcinst.so.2.0.0 libodbcinst.so.1
完成后可使用ldd再次验证,确认所有可行后再进行下一步工具
ldd lib64/libsqlncli*
使用install安装命令进行安装
./install.sh install --force
声明文件敲空格输入YES安装
Enter YES to accept the license or anything else to terminate the installation: YES Checking for 64 bit Linux compatible OS ..................................... OK Checking required libs are installed ........................................ OK unixODBC utilities (odbc_config and odbcinst) installed ..................... OK unixODBC Driver Manager version 2.3.0 installed ......................... FAILED unixODBC Driver Manager configuration correct ...................... NOT CHECKED Microsoft SQL Server ODBC Driver V1.0 for Linux already installed .. NOT CHECKED Microsoft SQL Server ODBC Driver V1.0 for Linux files copied ................ OK Symbolic links for bcp and sqlcmd created ................................... OK Microsoft SQL Server ODBC Driver V1.0 for Linux registered ........... INSTALLED Install log created at /tmp/sqlncli.2486.13833.4245/install.log. One or more steps may have an *. See README for more information regarding these steps.
登陆数据库测试,当现实>1字符样式的时候就表示登陆成功,驱动安装完成
sqlcmd -S 192.168.88.81 -U sa -P '123456' >1
vim /etc/odbcinst.ini
[SQL Server Native Client 11.0] Description=Microsoft SQL Server ODBC Driver V1.0 for Linux Driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0 Threading=1 UsageCount=1
数据库链接测试
[root@localhost lib64]# isql -v Mydata sa '123456' +---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ SQL>
至此能够linux和python3能够正常链接和使用SQL Server了,但若是使用Django链接还须要作一下操做
django-pyodbc-azure组件安装 用于Django setting对sqlserver的支持,不安装的话会报ModuleNotFoundError: No module named 'sql_server'的错误
pip3 install django-pyodbc-azure
Django,setting配置以下:
'ENGINE': 'sql_server.pyodbc',
进入Django项目目录中 vim setting.py,在数据库配置项中配置如下信息[基本和Windows上边配置雷同]
DATABASES = { 'default': { 'ENGINE': 'sql_server.pyodbc', # odbc链接固定写法 'NAME': 'Mydata', # 须要链接的数据库名称 'USER': 'sa', # 数据库链接帐户 'PASSWORD': '123456', # 数据库链接密码 'HOST': '192.168.88.81', # 数据库服务地址 'PORT': '1433', # 数据库链接端口 'OPTIONS':{ 'driver':'SQL Server Native Client 11.0', 'MARS_Connection': True, } } }
配置完成后须要重启uwsgi服务才生效,uwsgi服务这里不作阐述,能够参考博文《Django部署-uwsgi配置》