前言
-
这两天学习了下Django,因为我使用的数据库是 SqlServer,在模型那里遇到了点问题,这篇文章做下记录。
-
Django连接数据库,你如果不使用模型,直接使用 pymssql 的话也是没问题的,毕竟通常就是这种嘛,这种的话这里就不说了,大家应该都懂。
开发环境
- windows 10
- python 3.9
- Django 3.2.5
- pycharm 2021.2.1
创建工程
-
使用pycharm创建项目(使用你任何你知道的方式创建一个项目就行了)
这里创建了个新环境,基于python3.9的,先已配置有环境可直接选择先前配置的解释器 即可,仅做演示。
默认创建出来的项目使用的是Django3.2.5。
这里直接创建的项目已带一个app,相关配置已默认设置好,其他方式的请参考Django官网。
-
安装 mssql-django与pyodbc 3.0 (or newer)
随意选择一种方式即可,工程使用的如下(仅展示mssql-django,pyodbc 类似)。
https://pypi.org/project/mssql-django/
注意一点,python解释器切换到我们刚刚创建的。
-
配置支持SqlServer
我们在项目的 settings.py 文件中找到 DATABASES 配置项,将其信息修改为:
具体配置请参考mssql-django# 'driver': 'SQL Server Native Client 11.0', DATABASES = { 'default': { 'ENGINE': 'mssql', 'NAME': 'test', # 数据库名称 'HOST': '127.0.0.1', # 数据库地址,本机 ip 地址 127.0.0.1 'PORT': 1433, # 端口 'USER': 'sa', # 数据库用户名 'PASSWORD': 'lh1234567', # 数据库密码 'OPTIONS': { 'driver': 'ODBC Driver 17 for SQL Server', }, } }
配置完成之后运行项目,看是否有报错,无报错则配置成功。
-
项目结构概览
首先看下项目结构:
-
配置url
修改test_sqlserver目录下urls.py文件如下:from django.contrib import admin from django.urls import path,include urlpatterns = [ path('admin/', admin.site.urls), path('web/', include("web.urls")) ]
在web目录下新建urls.py文件,内容如下:
from django.urls import path from . import views urlpatterns = [ path('testdb/', views.testdb), ]
-
配置model
在web目录下新建models.py文件,内容如下:from django.db import models # Create your models here. class Test(models.Model): name = models.CharField(max_length=20)
-
配置view
在web目录下新建views.py文件,内容如下:from django.http import HttpResponse from .models import Test # 数据库操作 def testdb(request): test1 = Test(name='runoob') test1.save() return HttpResponse("<p>数据添加成功!</p>") ```
数据库初始化
在命令行或终端中运行:
python manage.py migrate # 创建表结构
python manage.py makemigrations web # 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate web # 创建表结构
命令执行结果如下:
注意一点,我们开始新创建了个python39的环境,记得切换过去,如果你使用conda的话。
看下数据库结果:
默认生成上述表,注意web_test表是我们自己定义的(app名+models里类名)。
演示
到此就大功告成了,把运行起来看看怎么样吧。
看下数据库结果:
结论
说实话,这个连SqlServer还弄了差不多半天,本身Django官方只支持PostgreSQL、MariaDB、MySQL、Oracle 和 SQLite。 而我要使用的是SqlServer,所以就不得不使用第三方库。但是官方文档里提到的 却是 django-mssql-backend这个库。
看下这个库的支持情况:
我使用Django3.2.5的版本的时候,他执行创建数据表的时候,只创建了
- django_migrations
- django_content_type
两张表,还报一堆错,这就尴尬了。而且也看出来了,他的Python也支持到了3.7,所以就不得不重新选择了。
所幸在 https://stackoverflow.com/questions/67358097/keyerror-include-on-migrating-models-to-sql-server这个里面找到了答案。
就是使用 mssql-django,看下他的支持:
,Django支持到了4.0,Python也支持到了3.9.暂时完美解决了我说遇到的问题。
参考链接
https://stackoverflow.com/questions/67358097/keyerror-include-on-migrating-models-to-sql-server