django数据库
提到数据库,在开发工程中必备的,首先它属于I/O操作,也就是不怎么涉及到算法,也就是通常的暴力写代码,这种操作比较常见,就是与数据库做交互,既然交互了,那么就存在表关系和设计,那么如何设计数据库表?它又是做什么的?如何实现?接下来慢慢看
假使你做了一个小程序,不是别的,就是一个简单的小功能,没有涉及到什么复杂的一些代码,只想看看数据库的操作,首先django的数据库支持多钟,如下图:

可以看到它支持的还是蛮多的,但是一般要关联数据库,首先还得从配置文件说,打开配置文件,会看到里面有一个

这个,没错!你的数据库链接都在这里配置,通常使用MySql,那么他的配置就是
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'mydata', # 你要存储数据的库名,事先要创建之 'USER': 'root', # 数据库用户名 'PASSWORD': '0000', # 密码 'HOST': 'localhost', # 主机 'PORT': '3306', # 数据库使用的端口 } }
配置完之后,如果你的model文件里有内容,还需要同步数据库,但是他会报错,报什么错?

看意思是我们少东西,少什么东西?少这个东西.........
首先打开你的项目里面的__init__,熟悉这个吗?熟悉就操作,打开之后是这样

对,他本来就是空的,这个文件就是让你让你把这个目录当成模块取用的,不用管这个,你在里面写上
import pymysql # python3默认不支持MySql,可以用pymysql去代替,安装:pip3 install pymysql pymysql.install_as_MySQLdb() # 写上这个
接下来运行:
python manage.py makemigrations
python manage.py migrate
嗯哼?上面的准备完了?好的,接下来看实战
首先新建一个app,如果用pycharm的话直接创建,如果命令行..........没有命令行吧?windows基本都是编辑器,创建完app之后目录结构如下

注意!你在用pycharm创建项目的时候会有一个是否创建app的选项,看我第一篇。如果你当时选择创建了app,那么你不用管;如果你没有创建app,然后你创建完项目之后用命令创建了个app的话,一定要在配置文件中添加上,否则不会生效,看图片

看到里面有一个models的文件,它就是需要你去设计表关系的数据库,先来个简单的
class UserInfo(models.Model): name = models.CharField(max_length=32) age = models.CharField(max_length=32)
创建完之后就可以同步数据库了,然后看数据库

由此可以看出来,我们的数据库创建成功了(这只是一小步),接下来做一些操作
views: from django.shortcuts import render from . import models # 调用自己模块下的models # Create your views here. def server(requset): models.UserInfo.objects.create(name="蝙蝠侠",age="50") # 直接写入数据库 return render(requset,"server.html") urls: from django.conf.urls import url from django.contrib import admin from app1 import views # 调用app中的视图函数 urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^server/', views.server), # 创建一个url,指向app的视图函数 ]
server.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>操作成功</h1> # 自定义内容 </body> </html>
乱吗?看下面:
首先创建APP,随便命名——然后把代码一次写入到相对应的.py文件中——然后再创建一个.html文件,把它放入到templates里面,然后层及目录如下:

准备完毕之后,重启系统,然后输入地址:http://127.0.0.1:8000/server/
会看到一个页面

页面显示出来后,回到你的数据库,会看到

这样,操作完成!
这是增加数据库数据,那么要是获取呢?继续看代码:
views: from django.shortcuts import render from . import models # Create your views here. def server(requset): # models.UserInfo.objects.create(name="洛基",age="1500") # 新建一个洛基 mod = models.UserInfo.objects.get(name="洛基") # 获取洛基 return render(requset,"server.html",{"mod":mod}) server.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>操作成功{{ mod }}</h1> # 按照写,为什么,会说的 </body> </html>
然后重启服务,输入网址,会看到

然后你懵了,后面是什么东西?还有这操作?有!其实这不是问题,这是因为django内部原因,如果想要显示人名,你就得在你的数据库后面加上
class UserInfo(models.Model): name = models.CharField(max_length=32) age = models.CharField(max_length=32) # 加上这个 def __str__(self): return self.name
然后你再看,正常了,获取到数据了。
给个提示,看代码:
models.UserInfo.objects.create(name="洛基",age="1500") mod = models.UserInfo.objects.get(name="洛基") emmmm。。。。。一个创建,一个获取,代码差不多啊,然后你就考虑一下,删除和修改??
上钩了!其实model操作的删和改不是这样的,怎么删除呢?首先是不是先要去取出来数据?对,就这样
def server(requset):
# models.UserInfo.objects.create(name="洛基",age="1500")
# mod = models.UserInfo.objects.get(name="洛基")
# 洛基在妇联三挂了,先把他删了吧
models.UserInfo.objects.get(name="洛基").delete()
return render(requset,"server.html")
好勒,回到数据库,洛基不在了(你的抖森.......)
然后是修改,蝙蝠侠岁数太大,我想让他小一点,我想让他20,如下图

看代码实现
def server(requset): models.UserInfo.objects.filter(name="蝙蝠侠").update(age=20)
return render(requset,"server.html")
然后执行,看结果

你有疑问,疑问是:为什么这个不是get,那如果我只想修改一个人的,怎么操作?
回答你:get也可以,不过用上面的方式去修改,他会提示你报错,你的表没有什么乱起八糟的,反正就是报错,但是你如果真想修改某个人的,比如

可以看到我的岁数是50岁!?嗯?算了,然后我想变成20,大学时期.....可以这样写
def server(requset): up = models.UserInfo.objects.get(name="陈晨") up.age = "20" up.save() return render(requset,"server.html") 为什么这样?因为你得先给我赋值一个变量,然后根据数据库取出来我的数据再进行操作,然后保存修改
我的大学生活.......大学生活好吗?emmmm........好!
经过一顿的操作,知道了django对数据库的增删改查了,以后基本都离不开这四个操作了,下面还有补充的内容
get:单个操作
filter:所有符合的
all:所有
增加:------------------- 第一种:models.UserInfo.objects.create(user='陈晨',age='20') 第二种:obj = models.UserInfo(user='陈晨',age='20') obj.save() 第三种:dic = {'user':'陈晨','age':'20'} models.UserInfo.objects.create(**dic) 删除:---------------------- models.UserInfo.objects.get(user='陈晨').delete()
models.UserInfo.objects.filter(user='陈晨').delete() 修改:----------------------- 第一种:models.UserInfo.objects.filter(user='陈晨').update(age='10') 第二种:obj = models.UserInfo.objects.get(user='陈晨') obj.age = '520' obj.save() 查找:models.UserInfo.objects.all() models.UserInfo.objects.all().values('user') #只取user列 models.UserInfo.objects.all().values_list('id','user') #取出id和user列,并生成一个列表 models.UserInfo.objects.get(id=1) models.UserInfo.objects.get(user='陈晨')
这只是简单的数据库操作,后续还有更多的关于model操作,到时候会单独开一篇去描述,如果不是大的项目,这个够用了
posted on 2018-06-15 15:54 ArkhamKnight 阅读(84) 评论(0) 收藏 举报
浙公网安备 33010602011771号