Django模型

Django模型

Django对各种数据库提供了很好的支持。包括MySQL,SQLite,Orcale等。

Django为这些数据库提供了统一的调用api。可以根据不同的业务,选择不同的数据库。

下面使用Mysql数据库作为演示。

如果没有安装MySQL的驱动包,可以使用pip安装

pip install pymysql
数据库的配置

在项目的settings.py文件中找到DATABASES配置项,将其信息改为:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql', 
        'NAME': 'db_django',    #你的数据库名称
        'USER': 'root',   #你的数据库用户名
        'PASSWORD': 'root', #你的数据库密码
        'HOST': '', #你的数据库主机,留空默认为localhost
        'PORT': '3306', #你的数据库端口
    }
}

如果运行报下面的错误:

Unhandled exception in thread started by <function check_errors.<locals>.wrapper at 0x0000025828AC0D90>
Traceback (most recent call last):
  File "D:\dsoftinstall\Anaconda\lib\site-packages\django\db\backends\mysql\base.py", line 26, in <module>
    import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'

可以在项目的init.py文件中加上

import pymysql
pymysql.install_as_MySQLdb()
定义模型
  1. 创建一个APP
    Django规定,如果需要使用模型,需要创建一个APP。下面在项目目录下,使用下面命令创建一个test_model的app。
django-admin startapp testmodel

目录结构如:

image

  1. 修改testmodel/models.py文件,代码如下:
from django.db import models

class Person(models.Model):
    name = models.CharField(max_length=20)
    age = models.IntegerFiled()
  1. 注册APP(配置APP信息)

在test_django目录下的settings.py文件中,修改INSTALLED_APPS信息,如下:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'testmodel',   # 添加test_model到配置中
]
  1. 创建表结构
python manage.py migrate   # 创建表结构

或者

python manage.py makemigrations testmodel  # 让 Django知道我们在我们的模型有一些变更

python manage.py migrate testmodel   # 创建表结构

当看到Create table的时候,表示创建成功,如:

image

  1. 修改项目下的urls.py配置

在testmodel目录下的tests.py定义一个testdb的方法,如:

from testmodel.models import Person
from django.http import HttpResponse

def testdb(request):
    pass

在urls.py文件中,配置url的连接

from django.conf.urls import url
# from django.contrib import admin
from testmodel import tests

urlpatterns = [
    url(r'^testdb', tests.testdb)
]
  1. 添加数据

在tests.py文件的testdb方法中添加数据:

from testmodel.models import Person
from django.http import HttpResponse

def add(request):
    person = Person(name='zhangsan', age=19)
    person.save()   # 添加数据
    return HttpResponse('数据添加成功')

在urls.py文件,添加一个url,如:

urlpatterns = [
    ...
    url(r'^add/testdb/', tests.add),
    ...
]

在浏览器输入127.0.0.1:8000/add/testdb,显示数据添加成功,表示添加数据成功,如下图:

image

如果报错ProgrammingError (1146, "Table 'db_django.testmodel_person' doesn't exist")错误则是testmodel_person表没有创建好,执行以下代码即可:

python manage.py makemigrations testmodel  # 让 Django知道我们在我们的模型有一些变更

python manage.py migrate testmodel   # 创建表结构
  1. 更新数据

在testmodel/tests.py下,创建一个update方法,如:

def update(request):
    person = Person.objects.get(id=1)
    person.name = 'laowang'
    person.age = 30
    person.save()

    # 另外一种更新操作
    # Person.objects.filter(id=1).update(name='laowang', age=30)

    return HttpResponse('数据更新成功')

在urls.py文件中,配置url

urlpatterns = [
    ...
    url(r'^update/testdb/', tests.update),
    ...
]

在浏览器输入127.0.0.1:8000/update/testdb,显示数据更新成功,表示数据更新成功

  1. 删除数据

在testmodel/tests.py文件,定义一个delete方法。如:

def delete(request):
    person = Person.objects.get(id=1)
    person.delete()

    # 另外一种方式
    # Person.objects.filter(id=1).delete()

    # 删除所有数据
    # Person.objects.all().delete()

    return HttpResponse('数据删除成功')

在testdjango/urls.py文件中,配置一个url,如:

urlpatterns = [
    ...
    url(r'^del/testdb/', tests.delete),
    ...
]

在浏览器中输入127.0.0.1:8000/del/testdb,显示数据删除成功,表示成功。

  1. 获取数据

在testmodel/tests.py文件,定义一个query方法。如:

def query(request):
    list = Person.objects.all() # 获取数据库所有数据
    results = ''
    for item in list:
        result = item.name + "    " + str(item.age) + " "
        results += result
    return HttpResponse(results)

在testdjango/urls.py文件中,配置一个url,如:

urlpatterns = [
    ...
    url(r'^query/testdb/', tests.query),
    ...
]

在浏览器中输入127.0.0.1:8000/query/testdb,显示数据库中查询出的数据,表示成功。

除了查询所有,还有其他操作,如:

Person.objects.all()    # 查询所有数据

Person.object.get(id=1) # 查询id=1的数据

Person.objects.get(name='lisi') # 查询name='lisi'的数据

Person.objects.order_by('name')[0:2]    # 查询以name排序后,限制取出2条数据

详情参考:Django的增删改查操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值