一、连接数据库
1、安装mysql
2、创建数据库
create database mydb default charset=utf8
3、在项目的settings.py文件中找到DATABASES 配置项(下图位置)
将内容修改为:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'mydb', # 数据库名称
'HOST': '127.0.0.1', # 数据库地址,本机ip地址
'POST': 3306, # 端口
'USER': 'root', # 数据库用户名
'PASSWORD': '123456', # 数据库密码
}
}
4、Django使用pymysql模块连接mysgl数据库
(在与 settings.py 同级目录下的 init.py 中引入模块和进行配置)
import pymysql
pymysql.install_as_MySQLdb()
二、定义模型
1、Django 规定,如果要使用模型,必须要创建一个 app。如果没有可以在命令行输入django-admin.py startapp AppName来创建APP
2、打开app下的models.py 文件,添加以下内容
from django.db import models
class Test(models.Model):
name = models.CharField(max_length=20)
注:上边的类名代表了数据库名
类里面的字段name代表了数据表中的字段
数据类型CharField(相当于varchar)
max_length 参数代表限定长度
3、在 settings.py 中找到INSTALLED_APPS这一项,添加app名称
4、在命令行中运行
python manage.py migrate # 创建表结构
python manage.py makemigrations app_text2 # 让 Django 知道我们在我们的模型有一些变更
python3 manage.py migrate app_text2 # 创建表结构
常见的报错:
Access denied for user ‘root’@‘localhost’(using password:YES);
解决方法:
1、打开MySQL目录下的my.ini文件,在文件的最后添加一行“skip-grant-tables”,保存并关闭文件。
2、在cmd(用管理员运行cmd)中用命令(net stop mysql/net start mysql)重启mysgl
3、通过命令行进入MySQL的BIN目录,输入“mysql -u root -p”,回车即可进入数据库。
4、执行“use mysql;”,使用mysql数据库。
5、执行“ select * from user where user=‘root’;“你会看到很多乱码,其实不是乱码,这是mysql用户数据库,如下图:
7、执行“update user set authentication_string=PASSWORD(“123456”) where user=‘root’;”(修改root的密码)
8、打开MySQL目录下的my.ini文件,删除最后一行的“skip-grant-tables”,保存并关闭文件。
9、再重启mysql服务
10、重启pytharm
三、数据库操作
1、修改 urls.py
from django.contrib import admin
from django_Text2 import testdb
urlpatterns = [
path('admin/', admin.site.urls),
path('testdb/', testdb.testdb)
]
2、创建testdb.py 文件
3、在test.py中添加以下内容,添加数据需要先创建对象,然后再执行 save 函数,相当于SQL中的INSERT
from django.http import HttpResponse
from app_text2.models import Test
def testdb(request):
test1 = Test(name='mydb')
test1.save()
return HttpResponse("<p>数据添加成功</p>")
4、运行,访问访问 http://127.0.0.1:8000/testdb
5、获取数据
from django.http import HttpResponse
from app_text2.models import Test
def testdb(request):
# 初始化
response = ""
response1 = ""
# 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
list = Test.objects.all()
# filter相当于SQL中的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="mydb").order_by("id")
# 输出所有数据
for var in list:
response1 += var.name + " "
response = response1
return HttpResponse("<p>"+ response + "</p>")
6、更新数据(修改数据可以使用 save() 或 update()。)
from django.http import HttpResponse
from app_text2.models import Test
def testdb(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='Google')
# 修改所有的列
# Test.objects.all().update(name='Google')
return HttpResponse("<p>修改成功</p>")
7、删除数据(删除数据库中的对象只需调用该对象的delete()方法即可:)
from django.http import HttpResponse
from app_text2.models import Test
def testdb(request):
# 删除id=1的数据
test1 = Test.objects.get(id=1)
test1.delete()
# 另外一种方式
# Test.objects.filter(id=1).delete()
# 删除所有数据
# Test.objects.all().delete()
return HttpResponse("<p>删除成功</p>")