Linux上使用MSSQL Server作为Django的Database Backend

http://www.digglife.net/articles/mssql-as-database-backend-django.html


Django只内置了几个 Database Backend,默认并不支持 Microsoft SQL Server( 以下用 MSSQL 代替 )。官方手册中提供的第三方 MSSQL Backend 因为依赖的问题只支持 Windows 平台,在 Linux Server 上不可用。可能很多人会问,谁会在 Linux 上用邪恶的 MSSQL 当 Django 的数据库后台,其实在企业中很多事情身不由己,各种奇葩的需求都会有,这种算是比较小儿科的了。庆幸的是微软“大发慈悲”在2012年给 Redhat 提供了官方ODBC驱动(以前得用第三方的FreeTDS),而 Django 的第三方库中有比较完善的 ODBC 支持,所以我们可以迂回实现。

实现模式:MSSQL Server -> MSSQL Server ODBC Driver -> pyodbc -> django-pyodbc -> django frontend 。

Linux上使用MSSQL Server作为Django的Database Backend

安装MSSQL Server ODBC Driver 1.0

到微软的 Download Center下载 MSSQL Server ODBC Driver ,注意目前只支持64位的 RHEL 5/6 ,理论上 CentOS 也是支持的。压缩包里的 README 有详细的安装说明,也有比较完善的Shell安装脚本,我安装的时候并没有碰到什么异常。基本步骤:

  1. 如果Server上已经安装有 unixODBC DriverManager,先卸载。
  2. 使用压缩包中的 build_dm.sh 编译安装 unixODBC DriverManager

    这样做的好处是可以保证 configure 的各项参数符合要求,比如MSSQL的默认unicode字符集是UTF-16,所以 configure 参数里需要有--with-iconv-ucode-enc=UTF16LE

  3. 确定 unixODBC 正确安装之后,就可以运行 ./install.sh install 来安装 MSSQL Server ODBC Driver了。

安装pyodbc和django-pyodbc

sudo pip install pyodbc django_pyodbc即可。其实安装完pyodbc我们就可以在python的shell下测试了驱动是否安装成功。

1
2
3
import pyodbc
connection = pyodbc.connect('DRIVER={SQL Server Native Client 10.0};SERVER=127.0.0.1;DATABASE=test;UID=user;PWD=password')
cousor = connection.cursor()

如果提示无法import,多半是权限问题。

配置django settings

在 project 的 settings.py 中添加新的数据库设定,示例一枚:

1
2
3
4
5
6
7
8
9
10
'test':{
    'ENGINE':'django_pyodbc',
    'NAME':'test',
    'HOST':'127.0.0.1',
    'USER':'test',
    'PASSWORD':'password',
    'OPTIONS': {
        'driver': 'SQL Server Native Client 11.0',
    },
}

就是这么简单。然后惯例 ./manage.py shell 测试一下

1
2
3
4
from django.db import connections
cur = connections['test'].cursor()
cur.execute("SELECT * FROM testtable")
cur.fetchone()

如果能正常获得query结果说明一切正常。

因为我只是需要在一个APP的Views里通过 Raw SQL 来查询远程MSSQL的数据库,并不用在Model中使用它,所以并没有配置数据库路由,有需要的话可以参见Django的Multiple databases 参考手册

这个方法不仅适合MSSQL,对所有支持 ODBC 的 Database Server 应该都适用,说起来这都得感谢开放的微软同志呢。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值