我们重新创建一个项目 app01:
django-admin.py startproject app01
接下来在 settings.py 中找到 INSTALLED_APPS 这一项,如下:
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app01',
)
接下来,告诉 Django 使用 pymysql 模块连接 mysql 数据库:
实例
在与 settings.py 同级目录下的 init.py 中引入模块和进行配置
import pymysql
pymysql.install_as_MySQLdb()
创建模型
在项目中的 models.py 中添加以下类:
app01/models.py
class Book(models.Model):
id = models.AutoField(primary_key=True) # id 会自动创建,可以手动写入
title = models.CharField(max_length=32) # 书籍名称
price = models.DecimalField(max_digits=5, decimal_places=2) # 书籍价格
publish = models.CharField(max_length=32) # 出版社名称
pub_date = models.DateField() # 出版时间
然后在命令行执行以下命令:
$ python3 manage.py migrate # 创建表结构
$ python3 manage.py makemigrations app01 # 让 Django 知道我们在我们的模型有一些变更
$ python3 manage.py migrate app01 # 创建表结构
常见报错信息
如果执行以上命令时会出现如下报错信息:
原因是 MySQLclient 目前只支持到 Python3.4,因此如果使用的更高版本的 python,需要修改如下:
通过报错信息的文件路径找到 …site-packages\Django-2.0-py3.6.egg\django\db\backends\mysql 这个路径里的 base.py 文件,把这两行代码注释掉(代码在文件开头部分):
if version < (1, 3, 13):
raise ImproperlyConfigured('mysqlclient 1.3.13 or newer is required; you have %s.' % Database.__version__)
一般点报错的代码文件路径信息,会自动跳转到报错文件中行数,此时我们在报错的代码行数注释掉。
这时数据库 runoob 就会创建一个 app01_book 的表。
接下来我们在app01 项目里添加 views.py 和 models.py 文件,app01 项目目录结构:
app01
|-- app01
| |-- __init__.py
| |-- __pycache__
| |-- asgi.py
| |-- migrations
| |-- models.py
| |-- settings.py
| |-- urls.py
| |-- views.py
| `-- wsgi.py
数据库添加
规则配置:
app01/urls.py: 文件代码:
from django.contrib import admin
from django.urls import path
from . import views
urlpatterns = [
path('add_book/', views.add_book),
]
模型类实例化对象
需从 app 目录引入 models.py 文件:
from app 目录 import models
并且实例化对象后要执行 对象.save() 才能在数据库中新增成功。
app01/views.py: 文件代码:
from django.shortcuts import render,HttpResponse
from app01 import models
def add_book(request):
book = models.Book(title="菜鸟教程",price=300,publish="菜鸟出版社",pub_date="2008-8-8")
book.save()
return HttpResponse("<p>数据添加成功!</p>")