学习Python(2)Django 配置MySQL,同步数据库

358 阅读3分钟

一、配置MySQL

Django 的默认数据库是sqlite3,具体怎么样不知道了,反正是没用过,这里改为MySQL,做法也很简单,只需要修改配置文件即可

1.项目名文件下settings.py

DATABASES = {
    'default': {

        'ENGINE': 'django.db.backends.mysql',

        'NAME': 'blog_table',    #你的数据库名称

        'USER': 'root',   #你的数据库用户名

        'PASSWORD': '123456', #你的数据库密码

        'HOST': 'localhost', #你的数据库主机,留空默认为localhost

        'PORT': '3306', #你的数据库端口
    }
}

更多数据库配置参考:docs.djangoproject.com/en/2.0/ref/…

2.项目名文件下 __ init__.py

import pymysql
pymysql.install_as_MySQLdb()

二、创建models

from django.db import models

# Create your models here.

class Article(models.Model):
    #唯一ID
    article_id = models.AutoField(primary_key=True)

    #文章标题
    title = models.TextField(max_length=100)

    #文章摘要
    brief_content = models.TextField(max_length=200)

    #文章内容
    content = models.TextField(max_length=2000)

    #文章发布日期
    publish_date = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

常用model field 类型

1、AutoField 一个自增的IntegerField,一般不直接使用,Django会自动给每张表添加一个自增的primary key。

2、BigIntegerField 64位整数, -9223372036854775808 到 9223372036854775807。默认的显示widget 是 TextInput.

3、BinaryField ( Django 1.6 版本新增 ) 存储二进制数据。不能使用 filter 函数获得 QuerySet

4、BooleanField True/False,默认的widget 是 CheckboxInput。 如果需要置空,则必须用 NullBooleanField 代替。 Django 1.6 修改:BooleanField 的默认值 由 False 改为 None,在 default 属性未设置的情况下。

5、CharField 存储字符串。必须有 max_length 参数指定长度。默认的form widget 是 TextInput 如果字符串巨长,推荐使用 TextField。

6、CommaSeparatedIntegerField 一串由逗号分开的整数。必须有 max_length 参数。

7、DateField 日期,与python里的datetime.date 实例同。有以下几个可选的选项,均为bool类型: DateField.auto_now: 每次执行 save 操作的时候自动记录当前时间,常作为最近一次修改的时间 使用。注意:总是在执行save 操作的时候执行,无法覆盖。 DateField.auto_now_add: 第一次创建的时候添加当前时间。常作为 创建时间 使用。注意:每次create 都会调用。 默认的form widget 是 TextInput。 注意:设置auto_now 或者 auto_now_add 为 True 会导致当前自动拥有 editable=False 和 blank = True 设置。

8、DateTimeField 日期+时间。与python里的 datetime.datetime 实例同。常用附加选项和DateField一样。 默认 form widget 是一个 TextInput

9、TextField 大文本,巨长的文本。默认的 form widget 是 Textarea。

三、同步数据库

终端输入命令

# 1. 创建更改的文件
python manage.py makemigrations
# 2. 将生成的py文件应用到数据库
python manage.py migrate

我们的表已经在数据库生成,其它的应该是django的系统表

这里需要注意的是django不负责数据库编码,所以新建数据库时一定要指定好编码,不然后面操作中文字符会报错

导出数据 导入数据

python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json

把数据库中的表生成对应的model

python manage.py inspectdb

四、创建超级管理员

python manage.py createsuperuser # 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填
 
python manage.py changepassword username  # 修改 用户密码

创建完成之后,启动项目登陆admin后台

http://127.0.0.1:8888/admin

在这里我们也可以查看、维护数据

五、数据查询

现在表里面插入两条数据,在admin后台添加或者在数据库直接添加

django可以直接渲染模板页面,类似于jsp那种

views.py

from django.shortcuts import render
from django.http import HttpResponse
from blog.models import Article

def get_all_article(request):
    #获取所有数据
    article_list = Article.objects.all()
    #结合一个给定的模板和一个给定的上下文字典, 并返回一个渲染后的HttpResponse对象
    return render(request, 'blog/articles.html',{
        'article_list': article_list
    })

记得添加应用的路由

 path('get_all_article', blog.views.get_all_article),

编写页面,django 有很多自己的语法,感兴趣可以网上找一下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <table border="1">
        {% for article in article_list %}
            <tr>
                <td>{{article.title}}</td>
                <td>{{article.brief_content}}</td>
                <td>{{article.publish_date}}</td>
            </tr>
        {% endfor %}
    </table>
</body>
</html>

访问测试

http://127.0.0.1:8888/blog/get_all_article

可以正常取出数据,配置MySQL的大致流程就是这样了