Django-orm连接mysql
- MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库
- ORM是“对象-关系-映射”的简称,主要任务是:
- 根据对象的类型生成表结构
- 将对象、列表的操作,转换为sql语句
- 将sql查询到的结果转换为对象、列表
- 这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动
- Django中的模型包含存储数据的字段和约束,对应着数据库中唯一的表
1.环境配置
1.1mysqlclient安装
pip install mysqlcilent
pip install -i https://pypi.douban.com/simple mysqlclient
阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
#第一行命令不行尝试第二行,再不行就换源尝试,我是用阿里的直接成功了
如果是windonws环境可能不能直接安装,需要进行以下步骤:
- 下载mysqlcilent安装包:https://www.lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
- 进入mysqliclient路径:输入 pip Install mysqliclient
如果实在不行,这边建议您百度或者降低django版本。
1.2setting配置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'student',
'USER': 'root',
'PASSWORD': 'root',
'HOST': '127.0.0.1',
'PORT': '3306',
}
}
# 在应用创建之后记得加入install_app项
2.创建表
下面的介绍以我写的一个用户注册登录程序为例
在model.py文件内创建一个继承了 modles.Model的类,这就会在数据库内创建一个对应的表,注意表的名称为models.py所在的问价夹名_你创建的类名
# models.py
from django.db import models
class models_db1(models.Model):
UserName = models.CharField(max_length=11)
PassWord = models.CharField(max_length=11)
在这里我的app名为models_lr,所以在数据库查到的对应的表名为models_lr_models_db1
3.注册
写完类之后需要注意在对应的admin.py里进行注册
admin.py
from django.contrib import admin
from models_lr.models import models_db1
admin.site.register(models_db1)
4.生成迁移文件并迁移
#在terminal 终端输入
python manage.py makemigrations #生成迁移文件,在对应文件夹的migrations问价夹里可以找到
#再输入
python manege.py migrate #数据迁移
5.views视图函数里对数据库进行操作
from django.shortcuts import render, redirect
from models_lr import models
def get_un(UN): #从数据库中获取数据
s = models.models_db1.objects.filter(UserName=UN).values()
for i in s:
i = str(i)
return str(i.split(' ')[3][1])
#不知道为什么我获取到的是一个对象 所以要在后面加values()来取值
def updata_db(u, p): #因为不会写加入的英语。这其实是一个增加数据的操作
updata = models.models_db1()
updata.UserName = u
updata.PassWord = p
updata.save()
def cheak_cookie(fun): #检测cooike值来做一个持续登录
def wa(request):
if request.COOKIES.get('COOKIE')!=None:
return fun(request)
else:
return render(request,'login.html',context={
'a':'cookie已失效,请重新登录'})
return wa