DJango 学习(6)—— Django 数据库连接以及简单的前后端数据交互
pycharm 链接数据库
"""
三个位置
右侧上方 database
左下方 database
配置里面的 plugins 插件搜索
重装 pycharm
pycharm 可以充当很多数据库的客户端
"""
django orm
"""
orm: 对象关系映射
作用:能够让不会sql 语句的小白也可以通过 python 面向对象的代码简单快捷的操作数据库
不足:封装程度太高,有时候 sql 语句的效率偏低 需要自己写 sql 语句
表 ------------ 类
记录 ------------ 对象
某个字段的值 -------- 对象属性
应用 models.py 文件
"""
# 0. setting.py 配置文件修改连接的数据库
# 项目指定的数据库
DATABASES = {
'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
'ENGINE': "django.db.backends.mysql",
'NAME': 'test518',
"HOST": "127.0.0.1",
"PORT": 3306,
"USER": "root",
"PASSWORD": ""
}
}
__init__ 文件
import pymysql
pymysql.install_as_MySQLdb()
# 1. 先去 models.py 文件中书写一个类
class User(models.Model):
# 相当于 id int primary key auto_increment
id = models.AutoField(primary_key=True)
# name char(32)
name = models.CharField(max_length=32)
# password int
password = models.IntegerField()
# 2. 数据库迁移命令
1. python manage.py makemigrations 将操作记录记录到小本本上(makemigrations 文件夹)
2. python manage.py migrate 将操作真正同步到数据库中
# 只要你修改了 models.py 中和数据库有关的代码,你就必须重新执行上述的两条命令
# 如果创建表时,不定义字段主键时,orm 会自动创建一个名为 id 的主键
# Create your models here.
class User(models.Model):
"""
CharField 必须要有 max_length 参数,不指定会报错
verbase_name 该参数是所有字段都有的,就是用来对字段的解释
"""
# 相当于 id int primary key auto_increment
id = models.AutoField(primary_key=True, verbose_name="主键")
# name char(32)
name = models.CharField(max_length=32,verbose_name="用户名")
# password int
password = models.IntegerField(verbose_name="密码")
字段的增删改查
# 字段的增加
1. 直接在终端内给出 默认值
2. 该字段可以为空,或者直接设置默认值
info = models.CharField(verbose_name="个人简介", max_length=32, null=True) # 该字段可以为空
hobby = models.CharField(max_length=32, verbase_name="爱好", default="study") # 直接设置默认值
# 字段的修改
直接修改代码,执行数据库迁移的两条命令即可
# 字段的删(不要轻易操作)
将对应的字段注释,并执行数据库迁移命令
执行完毕之后,数据消失
"""
在操作 models.py 文件的时候一定要细心
千万不要注释一些字段
执行迁移命令之前最好先检查一下自己写的代码
"""
数据的增删改查
# 查询
res= models.User.objects.filter(name=username)
user_obj = models.User.objects.all()
return render(request, "usrelist.html", locals())
"""
返回值暂时当作 列表套对象的格式
它也支持索引取值 切片操作 但是不支持负数索引
它也不推荐索引的方式取值
user_obj = models.User.objects.filter(name=username).first()
"""
filter 可以携带多个参数,参数与参数之间默认是 and 关系,可以把 filter 当作 where
# 增加
res = models.User.objects.create(name=username, password=password)
# 返回值是当前被创建的对象本身
# 第二种
user_obj = models.User(name=username, password=password)
user_obj.save() # 保存数据
数据的查、改、删
# 先将数据库中的数据全部展示到前端,然后给每一个数据两个按钮,一个编辑一个删除
# 编辑功能
# 点击编辑按钮朝后端发送编辑数据的请求
"""
如何告诉后端用户想要编辑哪条数据
将编辑按钮所在的那一行数据的主键值告诉后端
/url/?user_id={
{ user_obj.id }}
"""
# 后端查询出用户想要编辑的数据并展示
def useredit(request):
edit_id = request.GET.get("id")
user_obj = models.User.objects.filter(id = edit_id).first()
if request.method == "POST":
name = request.POST.get("username")
password = request.POST.get("password")
# 编辑数据
# 方法一
# 批量操作,只更新修改的数据,效率较高
# models.User.objects.filter(id=edit_id).update(name=name, password=password)
# 方法二,效率较低,将数据全部更新一遍,无论该字段是否被修改
user_obj.name = name
user_obj.password = password
user_obj.save()
# 跳转页面
return redirect("/userlist/")
return render(request, "useredit.html", locals())
# 删除功能
跟编辑功能类似
def userdelete(request):
delete_id = request.GET.get("id")
# 删除数据
models.User.objects.filter(id=delete_id).delete()
return redirect