###第2部分###
连接MySQL
Django连接Mysql分三步
- Mysql提前创建好数据库。
- 修改Django的
settings.py
文件。 - 修改项目文件夹下的
__init.py
文件。
在这里我的数据库名字为dj_db
注释旧的设置,采用新的设置。
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': BASE_DIR / 'db.sqlite3',
# }
# }
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 默认
'NAME': 'dj_db', # 连接的数据库
'HOST': '127.0.0.1', # mysql的ip地址
'PORT': 3306, # mysql的端口
'USER': 'root', # mysql的用户名
'PASSWORD': '1234' # mysql的密码
}
}
import pymysql
pymysql.install_as_MySQLdb()
数据库的新建、增删改查
1 创建models
下面像CharField、Meta方法可以在其他博客或者官方文档中学习。
from django.db import models
# Create your models here.
class User(models.Model):
"""
创建用户表
"""
name = models.CharField(max_length=128, null=True, unique=True, verbose_name='昵称')
phone = models.CharField(max_length=128, null=True, unique=True, verbose_name='手机号')
password = models.CharField(max_length=128, null=True, unique=True, verbose_name='密码')
# meta类是配合admin进行管理的
class Meta:
db_table = 'web_user' # 数据库名称
ordering = ['name'] # 默认正序,倒序的话是'-name'
verbose_name = '用户'
verbose_name_plural = verbose_name
2 修改Setting和migrate
在INSTALLED_APPS中添加包含 models.py
文件的模块名称
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# 以下是自己添加的
'web',
]
当你向 INSTALLED_APPS
添加新的应用的时候,请务必运行 manage.py migrate
,此外你也可以先使用以下命令进行迁移 manage.py makemigrations
。
# mac系统命令
python manage.py makemigrations
python manage.py migrate
后面从navicat就可以看到表已经生成了。id是主键,是Django自动生成的,想改的话也可以改,查文档。
3 增删改查的“查”
我自己在navicat添加了一个字段,id=1,name=bill,phone=18966666666,password=1234。
在views.py添加代码:
from .models import User
# 注意这个点‘.’
def get_bill(request):
# 获取所有用户
# all_users = User.objects.all()
# 获取有条件的获取用户
user = User.objects.filter(name='bill')
return HttpResponse(user[0].phone)
在urls.py添加代码:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('get_bill/', views.get_bill, name='get_bill'),
# 上面这一行
]
访问http://127.0.0.1:8000/web/get_bill/
,结果会出现电话号码。
查的一些方法
latest_question_list = Question.objects.order_by('-pub_date')[:5]
# order_by:按xx排序
4 增删改查的“增”
在views.py添加代码:
def save_user(request, user_id):
user = User()
user.id = user_id
user.name = 'trent'
user.phone = '13888888888'
user.password = '2345'
# 调用save则保存数据到数据库中
user.save()
return HttpResponse('储存这个user成功')
在urls.py添加代码:
urlpatterns = [
path('', views.index, name='index'),
path('get_bill/', views.get_bill, name='get_bill'),
path('<int:user_id>/', views.save_user, name='save_user'),
# 上面这一行
]
访问http://127.0.0.1:8000/web/2/
,就会添加id为2的用户。
5 增删改查的“改”
在views.py添加代码:
def update_user(request):
User.objects.filter(name='trent').update(phone='12388888888', password='3456')
return HttpResponse('更新trent的信息成功')
在urls.py添加代码:
urlpatterns = [
path('', views.index, name='index'),
path('get_bill/', views.get_bill, name='get_bill'),
path('<int:user_id>/', views.save_user, name='save_user'),
path('update_trent/', views.update_trent, name='update_trent'),
# 上面这一行
]
访问http://127.0.0.1:8000/web/update_trent/
,就会修改trent的信息。
6 增删改查的“删”
在views.py添加代码:
def delete_trent(request):
User.objects.filter(name='trent').delete()
return HttpResponse('删除trent成功')
在urls.py添加代码:
urlpatterns = [
path('', views.index, name='index'),
path('get_bill/', views.get_bill, name='get_bill'),
path('<int:user_id>/', views.save_user, name='save_user'),
path('update_trent/', views.update_trent, name='update_trent'),
path('delete_trent/', views.delete_trent, name='delete_trent'),
# 上面这一行
]
访问http://127.0.0.1:8000/web/delete_trent/
,就会删除trent。
models.py指南
通用参数
verbose_name
# 人类可读的名称
primary_key = True
# 设置为主键
verbose_name = '别名'
# 设置别名
max_length = 20
# 设置最长长度
null = True
# Django 将在数据库中"存储"空值为 NULL。默认为 False。
blank = True
# 如果是 True ,该字段允许为空。默认为 False 。如果一个字段有 blank=True,表单验证将允许输入一个空值。如果一个字段有 blank=False,则该字段为必填字段。
unique = True
# 如果设置为 True,这个字段必须在整个表中保持值唯一。
类中属性:定义字段
class User(models.Model)
# 类的定义
# ------------------------------- #
id = models.BigAutoField(primary_key=True)
# id作为主键的推荐写法
SmallIntegerField
IntegerField
BigIntegerField
PositiveSmallIntegerField
# 0 到 32767
PositiveIntegerField
# 0 到 2147483647
PositiveBigIntegerField
# 0 到 9223372036854775807
# 上面看名字就很好理解了
DateField
# 日期
DateTimeField
# 日期+时间
models.BooleanField()
# bool
pic = models.FileField(upload_to='upload/pic/user/%Y/%m/%d', null=True, verbose_name="用户图片")
# 存文件用的
realname = models.CharField(max_length=128, null=True, unique=True, verbose_name='真实姓名')
# 文字
email = models.EmailField(unique=True, verbose_name='邮箱')
# email用
gender = (
('male', '男'),
('female', '女'),
)
sex = models.CharField(max_length=32, choices=gender, verbose_name='性别')
# choices的一种用法
c_time = models.DateTimeField(auto_now_add=True)
# DateTime,时间
类中类:meta类
# meta类是配合admin进行管理的
class Meta:
db_table = 'db_user'
# 定义数据库的名称
ordering = ['id']
# 默认正序,倒序的话是'-id'
verbose_name = '用户'
# 别名
verbose_name_plural = verbose_name
# 别名复数
参考文献
- 手把手教你使用Django如何连接Mysql
- django+mysql 实现增删改查