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)    收藏  举报

导航