Django模型

来源:互联网 发布:阿里云开启3306端口 编辑:程序博客网 时间:2024/05/21 18:45

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 DatabaseModuleNotFoundError: No module named 'MySQLdb'

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

import pymysqlpymysql.install_as_MySQLdb()

定义模型

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

目录结构如:

image

  1. 修改testmodel/models.py文件,代码如下:
from django.db import modelsclass 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 Personfrom django.http import HttpResponsedef testdb(request):    pass

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

from django.conf.urls import url# from django.contrib import adminfrom testmodel import testsurlpatterns = [    url(r'^testdb', tests.testdb)]
  1. 添加数据

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

from testmodel.models import Personfrom django.http import HttpResponsedef 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的增删改查操作

原创粉丝点击