需要在mysql中完成
打开你的Django项目中的settings.py文件,找到DATABASES设置部分,并进行如下配置:
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'your_database_name','USER': 'your_mysql_username','PASSWORD': 'your_mysql_password','HOST': 'localhost','PORT': '3306',}}
确保将your_database_name
、your_mysql_username
和your_mysql_password
替换为你的MySQL数据库的名称、用户名和密码。
在Django中,操作表的语句与直接在MySQL中执行的SQL语句有着密切的关系。Django的ORM(Object-Relational Mapping)提供了一种Pythonic的方式来操作数据库,它将Python代码翻译成对应的SQL语句,并执行这些SQL语句以实现数据库操作。
下面是一些常见的数据库操作,以及它们在Django ORM中的对应方式和在MySQL中的原生SQL语句:
Django ORM:
# 在models.py中定义模型class UserInfo(models.Model):name = models.CharField(max_length=64)password = models.CharField(max_length=128)age = models.IntegerField()
MySQL原生SQL:
CREATE TABLE application01_userinfo (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(64),password VARCHAR(128),age INT
使用Django的管理命令manage.py来执行数据库迁移操作,将模型映射到实际的数据库表。在命令行中执行以下命令:
python manage.py makemigrations# 生成数据库迁移文件python manage.py migrate# 应用数据库迁移
新增一个列
两种选择:
1) 立即提供一次性默认值(将在该列具有null值的所有现有行上设置)
2) 退出,在models.py中添加一个默认值或允许为空
# 添加默认值salary = models.IntegerField(default=5000)# 允许为空salary = models.IntegerField(null=True, blank=True)
# 原生sql语句:insert into application01_userinfo(name, password, age) VALUES ('quanquan', '123', 18)# UserInfo.objects.create(name=name, password=password, age=age)def register(request):# POST方式if request.method == 'POST':# 处理表单提交name = request.POST.get('name', '')password = request.POST.get('password', '')age = request.POST.get('age')# 构造上下文数据context = {'name': name,'password': password,'age': age,}# 往数据库插入数据UserInfo.objects.create(name=name, password=password, age=age)# 渲染模板并返回响应return render(request, 'result.html', context)else:# 显示表单页面return render(request, 'register.html')
register.html
<!DOCTYPE html><html><head><title>输入信息</title></head><body><h2>请输入您的信息</h2><form method="post" action="/register/">{% csrf_token %}<label for="name">姓名:</label><input type="text" id="name" name="name"><br><br><label for="password">密码:</label><input type="text" id="password" name="password"><br><br><label for="age">年龄:</label><input type="text" id="age" name="age"><br><br><input type="submit" value="提交"></form></body></html>
result.html
<!DOCTYPE html><html><head><title>提交结果</title></head><body><h2>提交结果</h2><p>您提交的信息如下:</p><p>姓名:{{ name }}</p><p>密码:{{ password }}</p><p>年龄:{{ age }}</p></body></html>
# 删除数据UserInfo.objects.filter(id=1).delete()UserInfo.objects.all().delete()
# 查询数据data_list = UserInfo.objects.all()# data_list = [行对象,行对象,...,行对象]QuerySet类型print(data_list)# <QuerySet [, ]>for obj in data_list:print(obj.name,obj.password,obj.age)# 圈圈 123456 20# 圈圈1 123456 11
# 更新 id 为 1 的记录的 name 和 age 字段UserInfo.objects.filter(id=1).update(name='new_name', age=30)
Django的ORM会将我们的Python代码翻译成对应的SQL语句,并执行这些SQL语句以实现数据库操作。这种方式简化了数据库操作的复杂性,同时也提高了代码的可读性和可维护性。
使用Django的管理命令manage.py来执行数据库迁移操作,将模型映射到实际的数据库表。在命令行中执行以下命令:
python manage.py makemigrations# 生成数据库迁移文件python manage.py migrate# 应用数据库迁移
Django 就会根据这个模型创建相应的 MySQL 表。假设你的应用名为 application01,模型名为userinfo,那么在 MySQL 数据库中就会生成一个名为 application01_userinfo的表
报错:django.db.utils.NotSupportedError: MySQL 8 or later is required (found 5.7.26)
原因:django与mysql版本不兼容
解决方式:
1.升级mysql版本(SELECT VERSION() 我的版本是5.5.40),有点麻烦不想升级
2.降低django版本(需要先搜一下版本兼容情况)
pip uninstall django
pip install django==2.0 -i https://pypi.tuna.tsinghua.edu.cn/simple