django连接sqlserver数据库。有很多的方案,以下介绍一种我认为比较可靠的方案。
调用层次关系大致如下:
django-pyodbc驱动
我使用的django版本是1.11.17,python版本为3.8。
django-pyodbc-azure是django-pyodbc的fork版本,支持sqlserver和Azure数据库。
安装django-pyodbc-azure
pip install django-pyodbc-azure==1.11.15
因为django-pyodbc-azure需要与django的大版本号一一对应。pip install django-pyodbc-azure==1.11会默认安装1.11.0版本,该版本的isolation_level有bug,不会起作用。
ODBC驱动
推荐使用微软驱动"ODBC Driver 17 for SQL Server",以下的连接有全平台的安装方式。
Django配置
我们业务需要的是读写分离,数据库有db_read和db_write两个数据库连接。由于django orm不能表达with nolock,所以使用isolation_level="READ UNCOMMITTED"达到同样效果。
'db_write': {
'NAME': 'db_main',
'ENGINE': 'sql_server.pyodbc',
'USER': 'backend',
'PASSWORD': 'backend',
'HOST': '127.0.0.1,18964',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
},
},
'db_read': {
'NAME': 'db_main',
'ENGINE': 'sql_server.pyodbc',
'USER': 'backend',
'PASSWORD': 'backend',
'HOST': '127.0.0.1,18964',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
'isolation_level':'READ UNCOMMITTED',
},
},