django访问sql server--django-pyodbc

描述:用django访问sql server,网上有介绍几种方法,这是主要介绍django-pyodbc

测试环境:

系统: ubuntu 12.04

      django 1.4

      python 2.7

      pyodbc 3.0.3 (python连接sql server的包)

      django-pyodbc 1.2 (一个django连接数据库的第三方包,主要用pyodbc连接sql server)

 

安装调试

主要参考文档:

http://logrit.com/weblog/2012/07/16/accessing-sql-server-mssql-database-django/

 

http://tzangms.com/programming/2391/

 

关于利用pyodbc访问sql server,可参考以前写的一篇文档:

http://xiaolin0199.iteye.com/blog/2020913

 

安装odbc和pyodbc

Python代码   收藏代码
  1. sudo apt-get install unixodbc unixodbc-dev freetds-dev tdsodbc python-dev  
  2. sudo easy_install pyodbc  

 

配置odbc

 

修改/etc/odbc.ini,添加 

Python代码   收藏代码
  1. [ODBC Data Sources]  
  2. ODBCNAME = Microsoft SQL Server  
  3. [MSSQL-PYTHON]  
  4. Driver = /usr/lib/i386-linux-gnu/odbc/libtdsodbc.so  
  5. Description = Hi! This is a description of the MSSQL-PYTHON driver  
  6. Trace = No  
  7. #Database = cxonline  
  8. Server = 192.168.0.47  
  9. Port = 1433  

 

测试

 

可通过isql命令测试odbc是否可连接服务器192.168.0.47上的sql server 

Python代码   收藏代码
  1. isql -v MSSQL-PYTHON <Username> <Password>  
  2. SELECT TOP 1 * FROM <SomeTable>  

 

安装django-pyodbc

django-pyodbc (google-code):http://code.google.com/p/django-pyodbc/

 

可通过以下命令安装:

Python代码   收藏代码
  1. svn checkout http://django-pyodbc.googlecode.com/svn/trunk/ django-pyodbc-read-only  
  2. cd django-pyodbc-read-only  
  3. python setup.py build install  

 

 

当然也可以直接将安装包中的sql_server copy到要使用的项目根目录下,

 

由于下面要说的该包中有一个小bug,所以我直接将包copy到项目根目录下,修改bug后加入svn

 

关于django-pyodbc的一个bug

修改sql_server/pyodbc/operations.py 10行

Python代码   收藏代码
  1. def __init__(self, connection):  
  2.        #super(DatabaseOperations, self).__init__()  
  3.        super(DatabaseOperations, self).__init__(connection)  
  4.        self.connection = connection  
  5.        self._ss_ver = None  

 

django-pyodbc的使用

写道
当前面的odbc都配置成功时,使用django-pyodbc就相当简单,
只要配置下数据库就可以连接sql server,而且可使用django原来的orm的写法
包括通过模型的定义来创建数据库等

 

 

修改 settings.py

Python代码   收藏代码
  1. DATABASES = {  
  2.     'default': {  
  3.         'ENGINE''django.db.backends.mysql'# Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.  
  4.         'NAME''icgoo_manage',                      # Or path to database file if using sqlite3.  
  5.         'USER''lidongdev',                      # Not used with sqlite3.  
  6.         'PASSWORD''xxxxx',                  # Not used with sqlite3.  
  7.         'HOST''192.168.0.8',                      # Set to empty string for localhost. Not used with sqlite3.  
  8.         'PORT''',                      # Set to empty string for default. Not used with sqlite3.  
  9.     },  
  10.     'mssql': {  
  11.         'NAME''cxonline_new',  
  12.         'ENGINE''sql_server.pyodbc',  
  13.         'HOST''192.168.0.47',  
  14.         'USER''sa',  
  15.         'PASSWORD''xxxxxx',  
  16.         'PORT''1433',                      # Set to empty string for default. Not used with sqlite3.  
  17.         'OPTIONS': {  
  18.                 'host_is_server'False,  
  19.                 'dsn''MSSQL-PYTHON',  
  20.         },  
  21. }  
  22.     }  
  23.   
  24. DATABASE_OPTIONS = {  
  25.         'host_is_server'False,  
  26.         'dsn''MSSQL-PYTHON',  
  27. }  
写道
定义的mssql就是用于连接sql server,
settings中关键是需要定义dsn到上面配置好的odbc数据源
'dsn': 'MSSQL-PYTHON',

 

 

 简单调试

Python代码   收藏代码
  1. #进入django项目的shell调试  
  2. $python manage.py shell  
  3.   
  4. >>> from django.db import connections  
  5. >>> conn = connections['mssql']  
  6. >>> cur = conn.cursor()  
  7. >>> cur.execute('select Top 1 * from _CRM_Company')  
  8. <pyodbc.Cursor object at 0xac1b528>  
  9. >>> cur.fetchall()  
  10. [(13528, u'\u91cd\u5e86\u65e0\u7ebf\u7eff\u6d32\u901a\u4fe1\u6280\u672f\u6709\u9650\u516c\u53f8'None1, u' 'None, u' ', u' 'NoneNoneNone, No  
  11. ne, False0NoneTrue831, datetime.datetime(20088288552240000), None2None, -10.00.0)]  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值