学习心得------Django通过配置使用mysql数据库

这篇博客详细记录了如何在Django项目中配置并使用MySQL数据库的过程,包括创建数据库、修改settings.py、安装pymysql、解决版本兼容问题、创建模型、执行迁移、插入数据、设置视图和URL、以及处理页面跳转和删除操作。遇到的问题和解决方案都有详尽说明。
摘要由CSDN通过智能技术生成
  1. 建立MySQL数据库
    create database bj18 charset=uft8;
    use bj18;

2.创建项目
workon py3
django-admin startproject test2
3.创建应用
python manage.py startapp booktest
4.注册应用,修改语言时区
# LANGUAGE_CODE = ‘en-us’
LANGUAGE_CODE = ‘zh-hans’
中文
#TIME_ZONE = ‘UTC’
#中国时区

TIME_ZONE = ‘Asia/Shanghai’

INSTALLED_APPS = [
‘booktest’,
]
5.修改使用数据库类型
DATABASES = {
‘default’: {
#‘ENGINE’: ‘django.db.backends.sqlite3’, #注释掉这一行
加上下面内容
‘ENGINE’: ‘django.db.backends.mysql’,
#‘NAME’: os.path.join(BASE_DIR, ‘db.sqlite3’)
‘NAME’:‘bj18’, #数据库必须手动创建
‘USER’:‘root’,
‘PASSWORD’:‘123’,
‘HOST’:‘localhost’,
‘PORT’:3306,
}
}

  1. 启动服务器
    python manage.py runserver
    发现 ‘no module named MYSQLdb’

  2. 安装pymysql
    pip list 发现没有
    pip install pymysql

  3. 在__init__.py中 加上
    import pymysql
    pymysql.install_as_MySQLdb()

9.启动python manage.py runserver服务器的时候又发现问题

由于 mysqlclient 目前不支持高版本python,出现这个错误之后可以根据错误提示找到文件位置,打开 base.py 文件,找到以下代码:

version = Database.version_info
if version < (1, 3, 13):
raise ImproperlyConfigured(‘mysqlclient 1.3.13 or newer is required; you have %s.’ % Database.version)
将 if 语句注释掉之后在执行命令就不会再报错

version = Database.version_info

if version < (1, 3, 13):

raise ImproperlyConfigured(‘mysqlclient 1.3.13 or newer is required; you have %s.’ % Database.version)

找了半天都找不到base.py 在哪里,最后才发现报错的地方有路径,顺着路径就能找到

之后还有一个问题:
AttributeError: ‘str’ object has no attribute ‘decode’
/home/mm/.virtualenvs/py3/lib/python3.6/site-packages/django/db/backends/mysql/operations.py

line 146, 把decode 改成encode

10.在model.py里建立模型类

from django.db import models

class BookInfo(models.Model):
btitle = models.CharField(max_length=20)
bpub_date = models.DateField()
# 阅读量
bread = models.IntegerField(default=0)
bcomment = models.IntegerField(default=0)
# 删除标记.软删除标记
isDelete = models.BooleanField(default=False)

class HeroInfo(models.Model):
hname = models.CharField(max_length=20)
hgender = models.BooleanField(default=False)
hcomment = models.CharField(max_length=200)
# 关系属性
hbook = models.ForeignKey(to=BookInfo, on_delete=models.CASCADE)
# 删除标记.软删除标记
isDelete = models.BooleanField(default=False)

在这里hbook = models.ForeignKey(to=BookInfo, on_delete=models.CASCADE)要写成这样
都是2.0版本的坑
之前写过一些提醒自己的记录,都被网站吞了,真讨厌。。。失去的时候才发现备份是多么重要

  1. 生成迁移文件
    python manage.py makemigrations

  2. 根据迁移文件,生成表
    python manage.py migrate

  3. 去数据库添加数据

insert into booktest_bookinfo(btitle,bpub_date,bread,bcomment,isDelete) values
(‘射雕英雄传’,‘1980-5-1’,12,34,0),
(‘天龙八部’,‘1986-7-24’,36,40,0),
(‘笑傲江湖’,‘1995-12-24’,20,80,0),
(‘雪山飞狐’,‘1987-11-11’,58,24,0);

向booktest_heroinfo表中插入测试数据:

insert into booktest_heroinfo(hname,hgender,hbook_id,hcomment,isDelete) values
(‘郭靖’,1,1,‘降龙十八掌’,0),
(‘黄蓉’,0,1,‘打狗棍法’,0),
(‘黄药师’,1,1,‘弹指神通’,0),
(‘欧阳锋’,1,1,‘蛤蟆功’,0),
(‘梅超风’,0,1,‘九阴白骨爪’,0),
(‘乔峰’,1,2,‘降龙十八掌’,0),
(‘段誉’,1,2,‘六脉神剑’,0),
(‘虚竹’,1,2,‘天山六阳掌’,0),
(‘王语嫣’,0,2,‘神仙姐姐’,0),
(‘令狐冲’,1,3,‘独孤九剑’,0),
(‘任盈盈’,0,3,‘弹琴’,0),
(‘岳不群’,1,3,‘华山剑法’,0),
(‘东方不败’,0,3,‘葵花宝典’,0),
(‘胡斐’,1,4,‘胡家刀法’,0),
(‘苗若兰’,0,4,‘黄衣’,0),
(‘程灵素’,0,4,‘医术’,0),
(‘袁紫衣’,0,4,‘六合拳’,0);

  1. 定义视图
    在view.py中添加
    from django.shortcuts import render
    from booktest.models import BookInfo

def index(request):
# 1. 查询出所有图书的信息
books = BookInfo.objects.all()
# 2. 使用模板
return render(request,‘booktest/index.html’,{‘books’:books})

  1. 建立模板和设置模板目录
    在test2文件夹下建立template目录,之下再建立booktest目录。
    在setting中注册模板路径
    TEMPLATES = [
    {
    ‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’,
    ’DIRS’: [os.path.join(BASE_DIR,‘templates’)], # 这一句
    ‘APP_DIRS’: True,
    ‘OPTIONS’: {
    ‘context_processors’: [
    ‘django.template.context_processors.debug’,
    ‘django.template.context_processors.request’,
    ‘django.contrib.auth.context_processors.auth’,
    ‘django.contrib.messages.context_processors.messages’,
    ],
    },
    },
    ]

16.在template\booktest 下建立index.html

<!DOCTYPE html>
图书信息 {% for book in books %}
  • {{ book.btitle }}
    1. 配置url
      test2下的:
      from django.contrib import admin
      from django.urls import path
      from django.conf.urls import url, include

    urlpatterns = [
    path(‘admin/’, admin.site.urls),
    url(r’^’, include(‘booktest.urls’)),
    ]

    migration下的:
    from django.urls import path
    from booktest import views
    from django.conf.urls import url
    urlpatterns = [
    url(r’^index$’, views.index),
    ]

    给自己的tip:注意import 新老版本不一样,查了好多资料才弄明白,真傻!

    1. 完善页面增加添加新数据
      !DOCTYPE html>
    图书信息 新增

    {# /create 相当于http://127.0.0.1:8000/create#} {% for book in books %}
  • {{ book.btitle }} {% endfor %}
  • 19.在urls.py中添加新页面
    urlpatterns = [
    url(r’^index ′ , v i e w s . i n d e x ) , u r l ( r ′ c r e a t e ', views.index), url(r'^create ,views.index),url(rcreate’, views.create)
    ]

    20.重定向
    from django.shortcuts import render
    from booktest.models import BookInfo
    from datetime import date
    from django.http import HttpResponse, HttpResponseRedirect

    def index(request):
    # 1. 查询出所有图书的信息
    books = BookInfo.objects.all()
    # 2. 使用模板
    return render(request,‘booktest/index.html’,{‘books’:books})

    def create(request):
    ‘’‘新增一本图书’’’
    # 1. 创建BookInfo()
    b = BookInfo()
    b.btitle = ‘流星蝴蝶剑’
    b.bpub_date = date(1990,1,1)

    # 2.保存进数据库
    b.save()
    
    # 3. 返回应答 让浏览器访问index
    #return HttpResponse('ok')
    ***return HttpResponseRedirect('/index')*** 让浏览器返回页面
    
    1. 添加删除
    图书信息 新增

    {# /create 相当于http://127.0.0.1:8000/create#} {% for book in books %}
  • {{ book.btitle }}---删除
  • {% endfor %}

    view.py:
    def delete(request,bid):
    ‘’‘删除点击的图书’’’
    # 1. 通过bid获取删除的对象
    book = BookInfo.objects.get(id=bid)
    book.delete()

    # 2.保存进数据库
    
    # 3. 返回应答 让浏览器访问index
    #return HttpResponse('ok')
    return HttpResponseRedirect('/index')
    

    urls.py
    urlpatterns = [
    url(r’^index ′ , v i e w s . i n d e x ) , u r l ( r ′ c r e a t e ', views.index), url(r'^create ,views.index),url(rcreate’, views.create),
    url(r’^delete(\d+)$’,views.delete),
    ]

    有一个坑是你删完了,再去添加id 就自动增加,不是从0开始了,过去老的数据里面hbook_id 就对应不上以前的位置了,需要修改。

    -------------------------结束--------------------------------------------

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值