Django 连接 SQLServer

Windows环境

  • 安装驱动https://docs.microsoft.com/zh-cn/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-ver15
  • 设置密码方式认证
    • 网络连接配置
  • 安装依赖
    pip install django-sqlserver django-pytds pyodbc django-pyodbc django-pyodbc-azure pypiwin32

    推荐在pycharm中手动安装

  • 配置ODBC数据源

  • settings.py 

    DATABASES = {
        'default': {
             'ENGINE': 'sql_server.pyodbc',
             'NAME': 'xxxxxxx',
             'USER': 'xxxxxxxxx',
             'PASSWORD': 'xxxxxxxxx',
             'HOST': 'localhost',
             'PORT': '1433',
              'OPTIONS': {
                  'driver':'SQL Server Native Client 10.0',    # 要与上面配置的ODBC数据源名称一致,同时注意,driver 为小写,切记切记!!!!!之前就因为这个问题折腾了整整一天
                  'MARS_Connection': True,    # 不能少了这项
             },
         },
    }

     

RedHat环境 

  • 须安装SQLServer驱动、unixODBC等依赖,具体操作见我另一篇随笔https://blog.csdn.net/weixin_38848757/article/details/114325932中关于SQLServer的配置部分。特别注意,由于必须依赖django-pyodbc-azure只支持Django>2.1 <=2.2,所以如果django版本不在这个区间的话基本就告别SQLServer了(据说高于2.2版本的django可以使用django-mssql-backend,小试了下也没成功,今后有需求可以参考https://blog.csdn.net/jackquin/article/details/104982314)。不要轻易尝试降级Django,别问我为什么。。。

    • 安装系统依赖

      yum -y install ncurses-devel

       

    • 安装py依赖

      pip install pyodbc django_pyodbc django-pyodbc-azure django-sqlserver

       

      • 等按照下面步骤安装freedtds之后可以测试一下

        import pyodbc
        DBCONNECTSTR = 'DRIVER={/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.7.so.1.1};SERVER=139.123.1.102;port=1433;DATABASE=BDS;UID=sa;PWD=root;TDS_Version=7.4;'
        conn=pyodbc.connect(DBCONNECTSTR)
        conn.execute('select getdate()').fetchall()
        # [(datetime.datetime(2021, 3, 10, 10, 10, 14, 263000), )]
        conn.close()
        

         

    • 安装freetds

      wget ftp://ftp.freetds.org/pub/freetds/stable/freetds-1.2.18.tar.gz
      tar -zxf freetds-1.2.18.tar.gz
      cd freetds-1.2.18/
      ./configure --prefix=/usr/local/freetds --with-tdsver=7.4 --enable-msdblib    # –with-tdsver 设置TDS版本;–enable-msdblib 是否允许Microsoft数据库函数库
      make && make install

       

      • 测试

        /usr/local/freetds/bin/tsql -H 139.123.1.102 -p 1433 -U sa -P root
        # locale is "en_US.UTF-8"
        # locale charset is "UTF-8"
        # using default charset "UTF-8"
        
        1> select @@version
        2> go
        # Microsoft SQL Server 2008 R2 (SP2) - 10.50.4000.0 (X64) 
        # 	Jun 28 2012 08:36:30 
        # 	Copyright (c) Microsoft Corporation
        # 	Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
        # 
        # (1 row affected)
        1> ^C
        
        # 或者可以配置一个固定的数据源
        vim /usr/local/freetds/etc/freetds.conf
        [TestDB]
                host = 139.123.1.102
                port = 1433
                tds version = 7.4    # 据说这个版本号只要不小于实际版本好就行,我的freetds是7.4的
        :wq
        
        /usr/local/freetds/bin/tsql -S TestDB -U sa -P root    # 连接正常即可

         

    • 配置unixODBC

      • 配置odbcinst.ini(该文件默认是空的)

        find / -name libtdsodbc.so.0
        # /usr/local/freetds/lib/libtdsodbc.so.0
        vim /etc/odbcinst.ini
        # 插入以下配置,其中Driver、Setup路径为上面搜索出的目录
        [FreeTDS] 
         Description=FreeTDS unixODBC Driver
         Driver=/usr/local/freetds/lib/libtdsodbc.so.0
         Setup=/usr/local/freetds/lib/libtdsodbc.so.0
         UsageCount=1 

        配置好后用odbcinst -q -d命令测试一下

      • 配置 odbc.ini(该文件默认也是空的)

        [MQ1]
        Driver=FreeTDS
        Server=139.123.1.102
        User=dbcheck
        TDS_Version=7.4
        Port=1433

        配置好后isql  MQ1 sa root测试一下

    • 配置Django工程setting.py

      DATABASES = {
      	'default': {
              'NAME': 'BDS',
              'ENGINE': 'sql_server.pyodbc',
              'HOST': '139.123.1.102',
              'USER': 'sa',
              'PASSWORD': 'root',
              'PORT': '1433',
              'default-character-set': 'utf8',
              'OPTIONS': {
                  'AUTOCOMMIT': True,
                  'host_is_server': True,
                  'unicode_results': True,
                  'driver': 'FreeTDS',
                  'extra_params': 'TDS_VERSION=7.4',    # 注意这个版本号
      			}
      		}
      	}

       

    • 参考文献:https://my.oschina.net/guol/blog/182295 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值