本人示例環境: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配置》