Django連接使用SQL Server數據庫

前言:

        衆所周知,Django 默認支持sqlite,mysql,oracle,postgresql數據庫,不支持SQL Server數據庫。但實際生產環境中SQL Server數據庫用的還是比較多的。我們這裏用ODBC驅動連接SQL Server數據庫,進行維護開發。假如你也需要,恭喜你不用再漫天亂扒帖子了。我會儘可能的詳細說Django建立和SQL Server數據庫的連接方法和存讀已經存在數據的SQL Server數據。

 

本人示例環境:

  • 系統版本: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和使用數據庫中的信息了。

        多看看錯誤信息冷靜的思考問題,你會找到答案的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章