Django入门基础:基于MySQL数据库的安装+连接+操作

4.数据库

4.1.安装数据库,推荐轻量型,查询快的MySQL,MySQL安装我之前有介绍过离线安装,如果联网的方便的话可以试下在线安装

需要注意的是一般linux系统自带的服务都是MySql5.5以下的,但是Django2.1之后只支持MySql5.6及以上,不然会报错:
django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table ((1064, “You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘(6) NOT NULL)’ at line 1”))

第一步、卸载掉之前的MySQL,卸载之前需要备份数据,如有需求

service mysqld stop
yum remove mysql mysql-* 

第二步、检测系统是否已经安装过mysql或其依赖,若已装过要先将其删除,否则安装过程会报错,输入命令: 

rpm -qa | grep mysql
## 如果存在,卸载冲突包
rpm -e rpm_name --nodeps

第三步、下载安装mysql5.6(要确定能连接外网) 
输入命令: 

rpm -Uvh http://repo.mysql.com/mysql-community-release-el6-5.noarch.rpm 
yum install mysql-community-server

# 查看版本
mysql -V

第四步、启动mysql 

service mysqld start 

如果出现错误无法启动 
MySQL Daemon failed to start. 
Starting mysqld: [FAILED] 

解决办法:

rm -fr /var/lib/mysql/*   # 删除老版本mysql的开发头文件和库
rm /var/lock/subsys/mysqld # 删除锁定文件 
killall mysqld    # 杀死所有mysql进程

# 输入完以上三步之后,再次启动
service mysqld start

第五步、设置数据库密码 
输入:mysql -u root -p 密码不输,直接enter进入数据库 
使用下面的命令更改密码以及赋予其他用户或终端连接的权利

  • mysql> set password=password('root');
  • mysql> grant all privileges on *.* to 'root'@'%' identified by 'root';

4.2.Django连接数据库

4.2.1.需要先安装mysql客户端:pip install mysqlclient

4.2.2.在setting.py里找到数据库的连接配置,并更改正确

DATABASES = { 
    'default': { 
        'ENGINE': 'django.db.backends.mysql', # 或者使用 mysql.connector.django 
        'NAME': 'test',   # mysql的数据库名
        'USER': 'test', 
        'PASSWORD': '****', 
        'HOST':'localhost', 
        'PORT':'3306', 
        }
}

4.2.3.创建 APP

Django规定,如果要使用模型,必须要创建一个app

使用命令django-admin startapp TestModel创建一个 TestModel 的 app:

目录结构如下:

HelloWorld
|-- TestModel
|   |-- __init__.py
|   |-- admin.py
|   |-- models.py
|   |-- tests.py
|   `-- views.py

我们修改 TestModel/models.py 文件,代码如下:

# models.py
from django.db import models

# 类名代表了数据库表名,且继承了models.Model, 
class Test(models.Model):
    # 类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)DateField(相当于datetime), max_length 参数限定长度。
    name = models.CharField(max_length=20)
    bgsj = models.DateField(max_length=30)

接下来在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',               # 添加此项
)

在命令行中运行:

python manage.py migrate   # 创建系统表结构
python manage.py makemigrations TestModel  # 让 Django 知道我们在我们的模型有一些变更
python manage.py migrate TestModel   # 创建自定义表结构

表名组成结构为:应用名_类名(如:TestModel_test)可去数据库里查看是否有此表生成,共有三个字段ID , NAME ,BGSJ

Django入门基础:基于MySQL数据库的安装+连接+操作_第1张图片

注意:尽管我们没有在models给表设置主键,但是Django会自动添加一个id作为主键

4.2.4.数据库操作

在urls.py里加上数据库的展现效果

from django.conf.urls import url
from django.urls import path
from . import  view,testdb

urlpatterns = [
    # path和url的效果是一致的,推荐用path比较轻便简洁
    url(r'^hello$',view.hello),
    path('testdb/',testdb.testdb),
    path('testdb1/',testdb.testdb1),
    url(r'^testdb2&',testdb.testdb2),
    path('testdb3/',testdb.testdb3)
]

在HelloWorld里新增一个testdb.py

#!coding=utf-8
from django.http import HttpResponse
from TestModel.models import Test

# 数据库操作
# 添加数据
def testdb(request):
    test1 = Test(bgsj='2019-07-17',name = 'Hong Chen')
    # save函数相当于insert
    test1.save()
    return HttpResponse("

数据添加成功111

") # 获取数据 def testdb1(request): # 初始化 response = "" response1 = "" # 通过objects这个模型管理器的all()获得所有数据行,相当于SELECT list = Test.objects.all() #filter相当于where,可设置过滤条件 response2 = Test.objects.filter(id=1) # 获取单个对象 response3 = Test.objects.get(id=1) # 限制返回的数据,相当于sql的 OFFSET 0 LIMIT 2; Test.objects.order_by('name')[0:2] # 数据排序 Test.objects.order_by('id') # 上面的方法可以连锁使用 Test.objects.filter(name="runoob").order_by("id") # 输出所有数据 for var in list: response1 += var.name + " " response = response1 return HttpResponse("

" + response + "

") # 修改数据 # 使用save() 或 update() def testdb2(request): # 修改其中一个ID=1的name字段,再save,相当于SQL中的UPDATE test1 = Test.objects.get(id=1) test1.name = 'Google' test1.save() # 另外一种方式 # Test.objects.filter(id=1).update(name='Goodle') # 修改所有的列 # Test.objects.all().update(name='Google') return HttpResponse("

修改成功

") # 删除数据 def testdb3(request): # 删除id=1的数据 test1 = Test.objects.get(id=1) test1.delete() # 另外一种方式 # Test.objects.filter(id=1).delete() # 删除所有数据 # Test.objects.all().delete() return HttpResponse("

数据删除成功

")

注意:每次更改完脚本,Django都会自动调度去完成数据库的一些操作,比如增删改等

Django入门基础:基于MySQL数据库的安装+连接+操作_第2张图片

也可以 python manage.py runserver 127.0.0.1:8000  界面查看数据库的操作动态

 

报错:如果自己手贱,把在数据库生成的数据表给删除了,报找不到表的错

django.db.utils.ProgrammingError: (1146, "Table 'hhy.TestModel_test' doesn't exist")

可以参考下这位大神的操作,也告诫我们任何时候都不要轻易动后台数据库,在前端操作来控制

django.db.utils.ProgrammingError: (1146, "Table 'hhy.TestModel_test' doesn't exist")

你可能感兴趣的:(Python与算法,MySQL)