Django连接使用SQL Server数据库(windows版)

原创
2018/12/06 22:48
阅读数 2.6W

前言:

        众所周知,Django 默认支持sqlite,mysql,oracle,postgresql数据库,不支持SQL Server数据库。但实际生产环境中SQL Server数据库用的还是比较多的。我们这里用ODBC驱动连接SQL Server数据库,进行维护开发。假如你也需要,恭喜你不用再漫天乱扒帖子了。我会尽可能的详细说Django建立和SQL Server数据库的连接方法和存读已经存在数据的SQL Server数据。

注:另有《Django连接使用SQL Server数据库(linux版)》,请自行在本人博文中查找

本人示例环境:

  • 系统版本:Windows2012
  • 数据库版本:SQL Server2012
  • python版本:Python 3.6.3
  • Django版本:Django2.1
  • 连接数据库工具:Navicat Premium

 

Django连接SQL Server前提:

  1. 【服务器属性--安全性】 开启SQL Server 和 Windows 身份验证模式
  2. 【服务器属性--连接】 开启允许远程连接到此服务器
  3. 建立远程账户能正常远程访问和基本的增删改查权限,第一次测试建议用sa等较高权限,等熟悉了降低用户权限
  4. 在服务器上安装Navicat Premium软件【请自行搜索和安装】,目的是用ODBC驱动连接SQL Server

 

Django连接SQL Server步骤:

 

1、安装必要django环境

pip install django-crontab django-mssql django-pyodbc django-pyodbc-azure django-pytds django-sqlserver

2、数据库驱动程序检查

  • 一般第三方连接数据库应用程序都自带的有,这里使用 Navicat Premium 示例,软件安装略
  • 驱动查看路径默认为 C:\Windows\SysWOW64\odbcad32.exe
  • 打开ODBC数据源管理程序,可以看到所有安装的ODBC驱动,找到Navicat Client的名称,用于填写到Django的setting中作为指定的默认驱动

 

安装 Navicat Premium 后去对应目录查看是否有ODBC驱动

 

 

3、Django 的 setting 中配置数据库连接信息

 

需要注意的是 OPTIONS默认数据库连接驱动设置的驱动要和上图ODBC中驱动保持一致!

很多人使用mysql多了 端口很容易写成3306,SQL Server端口默认1433

DATABASES = {
  'default': {
    'ENGINE': 'sql_server.pyodbc',			        # odbc连接固定写法
    'NAME': 'MySQLserver',				            # 自定义数据库连接名
    'USER': 'sa',					                # 数据库连接账户
    'PASSWORD': '123456!@#',				        # 数据库连接密码
    'HOST': '127.0.0.1',				            # 数据库服务地址
    'PORT': '1433',					                # 数据库连接端口
    'OPTIONS':{
        'driver':'SQL Server Native Client 11.0',	# ODBC连接应用驱动
        'MARS_Connection': True,
    }
  }
}

 

4、Django models表建立

 

注:

  1. 因为Django models 使用 python manage.py makemigrations APP python manage.py migrate 生成数据表时表名会自动加上APP的前缀。而如果现在连接的数据库已经有部分数据需要读取就不得不在 models 的class 中添加 Meta 参数指定数据库名称了。
  2. 如果数据库中已有数据表,字段信息要尽可能和数据库中字段参数保持一致

附:

        使用 python manage.py inspectdb > models.py 命令可以反向创建和导出数据库表,但自动创建和导出的表可能会有一定的错误和不完整。建议根据自身情况酌情使用。

        如果你从来没有连接创建成功过,建立先用models 创建生成一个简单的表进行测试

from django.db import models

class TEST(models.Model):
    ID = models.IntegerField(primary_key=True,)
    NAME = models.CharField(max_length=255,)

    class Meta:						# 如果读取已有数据的必要参数!
        db_table = "Test_Table"

    def __str__(self):
        return self.NAME

5、附言

        其它地方就和Django普通使用方式是一样的了~ 连接SQL Server 数据库时候,要想访问某个表中的某个数据,models.py 中肯定是要声明和指定表名的

        在很多时候连接不成功你可以利用 python manage.py makemigrations APPpython manage.py migrate 来验证下错误信息,如果数据库中已有该名称表的数据 仅仅会提示 数据库中已存在该对象 。当提示该信息时候大部分情况下你可以正常的 python manage.py runserver 启动服务和读取SQL Server和使用数据库中的信息了。

        多看看错误信息冷静的思考问题,你会找到答案的。

 

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
2 收藏
1
分享
返回顶部
顶部