django+mysql如何运用
发布时间:2021-12-27 00:17:24 所属栏目:MySql教程 来源:互联网
导读:这篇文章将为大家详细讲解有关django+mysql如何使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 Django中每一个模型model都对应于数据库中的一张表,每个模型中的字段都对应于数据库表的列。方便的是,django可以自
这篇文章将为大家详细讲解有关django+mysql如何使用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 Django中每一个模型model都对应于数据库中的一张表,每个模型中的字段都对应于数据库表的列。方便的是,django可以自动生成这些create table, alter table, drop table的操作。其次Django为咱们也提供了后台管理模块(Django-Admin),主要功能是通过后台管理来实现客户端的功能,可以对数据进行增删改查。也可以通过该功能进行二次开发 Django中的mysql配置 在上期内容,我们了解了settings.py配置信息的内容,其中DATABASES是用来管理数据库配置的,默认是sqlite3数据库,所以我们需要将其修改成mysql数据库。 # Database # https://docs.djangoproject.com/en/2.0/ref/settings/#databases # 数据库配置 默认的数据库为sqlite # DATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), # } # } DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'django_mysql', # 数据库名 'USER': 'root', # 账号 'PASSWORD': 'root', # 密码 'HOST': '127.0.0.1', # HOST 'POST': 3306, # 端口 } } 字段名称代码中都添加了相应说明,ENGINE为MYSQL数据库引擎,这个当然不会凭空出现,需要我们去安装 安装pymysql pip3 install pymysql 项目中配置 在最开始的项目包下的__init__.py中进行如下配置 """ setting中的配置默认为sqlite3数据库 当需要修改成MySql时 并且在setting.py的同级目录的__init__.py 加入如下配置 否则会报错: Error loading MySQLdb module. """ import pymysql pymysql.install_as_MySQLdb() 如果mysql配置信息错误(用户名、密码、host等)控制台会报如下异常 pymysql.err.OperationalError: (1045, "Access denied for user 'ROOT'@'localhost' (using password: YES)") 在app文件的models.py文件中 创建Student(学生信息)和StudentUnion(社团信息) models.py:数据模块,用于数据库设计 """ 创建学生信息表模型 """ from django.db import models """ 该类是用来生成数据库的 必须要继承models.Model """ class Student(models.Model): """ 创建如下几个表的字段 """ # 学号 primary_key=True: 该字段为主键 studentNum = models.CharField('学号', primary_key=True, max_length=15) # 姓名 字符串 最大长度20 name = models.CharField('姓名', max_length=20) # 年龄 整数 null=False, 表示该字段不能为空 age = models.IntegerField('年龄', null=False) # 性别 布尔类型 默认True: 男生 False:女生 sex = models.BooleanField('性别', default=True) # 手机 unique=True 该字段唯一 mobile = models.CharField('手机', unique=True, max_length=15) # 创建时间 auto_now_add:只有在新增的时候才会生效 createTime = models.DateTimeField(auto_now_add=True) # 修改时间 auto_now: 添加和修改都会改变时间 modifyTime = models.DateTimeField(auto_now=True) # 指定表名 不指定默认APP名字——类名(app_demo_Student) class Meta: db_table = 'student' """ 学生社团信息表 """ class studentUnion(models.Model): # 自增主键, 这里不能设置default属性,负责执行save的时候就不会新增而是修改元素 id = models.IntegerField(primary_key=True) # 社团名称 unionName = models.CharField('社团名称', max_length=20) # 社团人数 unionNum = models.IntegerField('人数', default=0) # 社团负责人 关联Student的主键 即studentNum学号 一对一的关系,on__delete 属性在django2.0之后为必填属性后面会介绍 unionRoot = models.OneToOneField(Student, on_delete=None) class Meta: db_table = 'student_union' """ OneToOneField: 一对一 ForeignKey: 一对多 ManyToManyField: 多对多(没有ondelete 属性) """ 在利用models.py文件生成数据库表之前,我们需要手动的先创建数据库: mysql> create database django_mysql; Query OK, 1 row affected (0.01 sec) 创建完django_msql库之后,我们在终端执行如下命令,他的作用是将models文件生成一个迁移文件 python3 manage.py makemigrations django+mysql如何使用 迁移文件生成完毕,执行 python3 manage.py migrate 会将迁移文件的内容作用到数据库中,生成表或者修改字段属性 控制台输出如下,则表示执行成功 (django_venv) xxxxxdeAir:djangoDemo xxxxx$ python3 manage.py migrate Operations to perform: Apply all migrations: admin, app_demo, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying app_demo.0001_initial... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying sessions.0001_initial... OK 查看我们的django_mysql数据库,其中student和student_union就是用models文件生成的表,其他的表是项目自动生成的,暂时可以先不用管 mysql> use django_mysql Database changed mysql> show tables; +----------------------------+ | Tables_in_django_mysql | +----------------------------+ | auth_group | | auth_group_permissions | | auth_permission | | auth_user | | auth_user_groups | | auth_user_user_permissions | | django_admin_log | | django_content_type | | django_migrations | | django_session | | student | | student_union | +----------------------------+ 12 rows in set (0.00 sec) 表结构 url(r'^insert/', views.insert) 浏览器中访问http://localhost:8000/insert/ 浏览器显示‘数据插入完毕’ 查询数据库,发现有5天数据,也就是插入成功 mysql> select * from student; +------------+------+-----+-----+------------+----------------------------+----------------------------+ | studentNum | name | age | sex | mobile | createTime | modifyTime | +------------+------+-----+-----+------------+----------------------------+----------------------------+ | 1352687635 | tom2 | 15 | 1 | 941807449 | 2018-11-08 09:58:40.226856 | 2018-11-08 09:58:40.227002 | | 5554311867 | tom0 | 15 | 0 | 1598619027 | 2018-11-08 09:58:40.203807 | 2018-11-08 09:58:40.203960 | | 7302510986 | tom4 | 15 | 0 | 9602601619 | 2018-11-08 09:58:40.251479 | 2018-11-08 09:58:40.251682 | | 847849420 | tom3 | 15 | 0 | 195276039 | 2018-11-08 09:58:40.238601 | 2018-11-08 09:58:40.238928 | | 9962892430 | tom1 | 15 | 0 | 3265013828 | 2018-11-08 09:58:40.215488 | 2018-11-08 09:58:40.216106 | +------------+------+-----+-----+------------+----------------------------+----------------------------+ 5 rows in set (0.00 sec) 查询数据 """ 查询 """ def find(request): #sql = 'select * from student' # django 也可以执行原生的sql语句 #result = Student.objects.raw(sql) # 查询name = tom1的数据 result = Student.objects.filter(name='tom1') """ result为<class 'django.db.models.query.QuerySet'>的对象 需要进行数据处理 """ arr = [] for i in result: content = {'学号': i.studentNum, '姓名': i.name, '性别': i.sex} arr.append(content) print(arr) print(type(arr)) return HttpResponse(arr) 配置urls,浏览器访问localhost:8000/find/ mysql> select * from student where studentNum='847849420'; Empty set (0.01 sec 关于“django+mysql如何使用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |