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()
定义模型
创建一个APP
Django规定,如果需要使用模型,需要创建一个APP。下面在项目目录下,使用下面命令创建一个test_model的app。django-admin startapp testmodel
目录结构如:
修改testmodel/models.py文件,代码如下:
from django.db import models
class Person(models.Model): name = models.CharField(max_length=20) age = models.IntegerFiled()注册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到配置中
]
创建表结构
python manage.py migrate # 创建表结构
或者
python manage.py makemigrations testmodel # 让 Django知道我们在我们的模型有一些变更
python manage.py migrate testmodel # 创建表结构
当看到Create table的时候,表示创建成功,如:
- 修改项目下的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)
]
- 添加数据
在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
,显示数据添加成功,表示添加数据成功,如下图:
如果报错ProgrammingError (1146, "Table 'db_django.testmodel_person' doesn't exist")
错误则是testmodel_person表没有创建好,执行以下代码即可:
python manage.py makemigrations testmodel # 让 Django知道我们在我们的模型有一些变更
python manage.py migrate testmodel # 创建表结构
- 更新数据
在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
,显示数据更新成功,表示数据更新成功
- 删除数据
在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
,显示数据删除成功,表示成功。
- 获取数据
在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的增删改查操作
还没有评论,来说两句吧...