Django模型

一时失言乱红尘 2022-06-06 04:45 381阅读 0赞

Django模型

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

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

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

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

  1. pip install pymysql

数据库的配置

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

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

如果运行报下面的错误:

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

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

  1. import pymysql
  2. 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()

  2. 注册APP(配置APP信息)

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

  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'testmodel', # 添加test_model到配置中
  9. ]
  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的方法,如:

  1. from testmodel.models import Person
  2. from django.http import HttpResponse
  3. def testdb(request):
  4. pass

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

  1. from django.conf.urls import url
  2. # from django.contrib import admin
  3. from testmodel import tests
  4. urlpatterns = [
  5. url(r'^testdb', tests.testdb)
  6. ]
  1. 添加数据

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

  1. from testmodel.models import Person
  2. from django.http import HttpResponse
  3. def add(request):
  4. person = Person(name='zhangsan', age=19)
  5. person.save() # 添加数据
  6. return HttpResponse('数据添加成功')

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

  1. urlpatterns = [
  2. ...
  3. url(r'^add/testdb/', tests.add),
  4. ...
  5. ]

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

image

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

  1. python manage.py makemigrations testmodel # 让 Django知道我们在我们的模型有一些变更
  2. python manage.py migrate testmodel # 创建表结构
  1. 更新数据

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

  1. def update(request):
  2. person = Person.objects.get(id=1)
  3. person.name = 'laowang'
  4. person.age = 30
  5. person.save()
  6. # 另外一种更新操作
  7. # Person.objects.filter(id=1).update(name='laowang', age=30)
  8. return HttpResponse('数据更新成功')

在urls.py文件中,配置url

  1. urlpatterns = [
  2. ...
  3. url(r'^update/testdb/', tests.update),
  4. ...
  5. ]

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

  1. 删除数据

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

  1. def delete(request):
  2. person = Person.objects.get(id=1)
  3. person.delete()
  4. # 另外一种方式
  5. # Person.objects.filter(id=1).delete()
  6. # 删除所有数据
  7. # Person.objects.all().delete()
  8. return HttpResponse('数据删除成功')

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

  1. urlpatterns = [
  2. ...
  3. url(r'^del/testdb/', tests.delete),
  4. ...
  5. ]

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

  1. 获取数据

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

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

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

  1. urlpatterns = [
  2. ...
  3. url(r'^query/testdb/', tests.query),
  4. ...
  5. ]

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

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

  1. Person.objects.all() # 查询所有数据
  2. Person.object.get(id=1) # 查询id=1的数据
  3. Person.objects.get(name='lisi') # 查询name='lisi'的数据
  4. Person.objects.order_by('name')[0:2] # 查询以name排序后,限制取出2条数据

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

发表评论

表情:
评论列表 (有 0 条评论,381人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Django模型

    Django 模型 Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。 Django 为这些数据库提供了

    相关 Django模型

    Django模型 Django对各种数据库提供了很好的支持。包括MySQL,SQLite,Orcale等。 Django为这些数据库提供了统一的调用api。可以根据不同

    相关 Django 模型

    Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库,只需要