Python Web开发框架之Django篇——二、Django连接MySQL数据库以及建表的操作
二、Django连接MySQL数据库以及建表的操作
- 准备工作:安装Python访问MySQL的模块
- 一、修改project同名目录下面的__init__.py文件
- 二、修改project同名目录下面的setting.py文件
- 三、注册子应用app
- 四、生成数据库结构
- 4.1 生成初始化文件
- 4.2 生成数据库结构
- 五、创建基本类——设置ORM数据模型类与MySQL数据库中表的映射
- 5.1 根据类自动创建数据库表
- 5.2 通过模型类操作数据表
- 附录:ORM模型介绍
准备工作:安装Python访问MySQL的模块
可以使用pymysql
库或者mysqlclient
。
不过,Django官方已经不建议使用pymysql
库了,而是改用mysqlclient
,直接pip安装即可。
pip install mysqlclient # 安装mysqlclientpip install pymysql # 安装pymysql
执行以下操作后,可见mysql对应数据库中出现表。注意,django不能建库,所以提前建好库。
一、修改project同名目录下面的__init__.py文件
具体步骤:
Django连接mysql数据库首先需要在project同名目录下面的__init__.py文件
里加入下面的代码行。
"""
setting中的配置默认为sqlite3数据库 当需要修改成MySql时
并且在setting.py的同级目录的__init__.py 加入如下配置
否则会报错: Error loading MySQLdb module.
"""
import pymysql
pymysql.install_as_MySQLdb() # 使用pymysql代替mysqldb连接数据库
二、修改project同名目录下面的setting.py文件
具体步骤:
在project同名目录下面的setting.py文件
里修改DATABASES参数
设置,具体如下:
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql', # 数据库引擎'NAME': 'mysql_django', # 数据库名'USER': 'root', # 账号'PASSWORD': 'password', # 密码——这里要用引号'HOST': '127.29.145.73', # HOST'PORT': 3306, # 端口}
}
三、注册子应用app
核心功能: 告诉Django有哪些app。要将应用添加到项目中,需要在INSTALLED_APPS设置中增加指向该应用的配置文件的链接。
具体操作: 在project同名目录下面的setting.py文件
里,把刚创建的子应用添加进入INSTALLED_APPS参数
中。
# Application definitionINSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','myapps.apps.MyappsConfig', # # 把刚创建的子应用添加进来#'myapps', # # 把刚创建的子应用添加进来,简写成‘子应用APP名称’就可以
]
链接路径:
对于本例的子应用myapps
,它的配置类文件MyappsConfig
位于myapps/apps.py脚本
内,所以配置的点式链接路径
为myapps/apps.MyappsConfig
。我们需要在INSTALLED_APPS参数中,将该路径添加进去(字符串格式)。实际上,在多数情况下,我们简写成【子应用名称】即可。(例如本例中的‘myapps’)
备注说明:
如果想要通过python manage.py makemigrations
找到我们所有的models,然后通过python manage.py migrate
帮我们生成数据库表,就必须先注册app。这个在 project.settings.py里面INSTALLED_APPS参数中设置。
四、生成数据库结构
python manage.py makemigrations ## 4.1 生成初始化文件
python manage.py migrate ## 4.2 生成数据库结构
需要注意的是 这两个命令默认情况下是作用于【全局】,也就是对所有最新更改的models或者migrations下面的迁移文件进行对应的操作, 如果要想【仅仅对部分app进行作用】的话,需要额外指定对应的appname 。
4.1 生成初始化文件
我们在生成表结构之前,先要生成初始化文件,需要执行 python manage.py makemigrations,去找我们注册号的app01。
1、使用【makemigrations】生成迁移脚本文件——创建数据库表的变更脚本 ,具体执行命令如下:
python manage.py makemigrations # 默认作用于全局python manage.py makemigrations appname # 仅对指定名称的app进行作用
4.2 生成数据库结构
2、使用【migrate】将新生成的迁移脚本文件映射到数据库中——执行数据表变更 ,具体执行命令如下:
python manage.py migrate # 默认作用于全局python manage.py migrate appname # 仅对指定名称的app进行作用python manage.py migrate appname 文件名 # 精确到某一个迁移文件则可以使用
映射后,在文件中会生成一个文件:
五、创建基本类——设置ORM数据模型类与MySQL数据库中表的映射
在你创建的【子应用app文件夹】下找到models.py文件
,这个文件是用来创建数据模型。 主要完成以下两项工作:
- 根据类自动创建数据库表;
- 根据类对数据表中的数据进行各种操作;
备注:在【子应用app】的
modles.py文件
里面创建基本类Class,这些类必须继承modles.Model作为父类。注意了,这个modles.py不能更名,这个是django规定好的。
5.1 根据类自动创建数据库表
定义一个数据表,【生成表名的默认格式】:应用名_模型类名小写
:
典型范例:
from django.db import models# Create your models here.#生成表名 app名_userinfo,例如app名叫 app01,则表名:app01_userinfo
class UserInfo(models.Model):#id是django默认帮你创建,然后默认是主键,自增长#列名 ,字符串类型,指定字符串的长度为32username = models.CharField(max_length=32)password = models.CharField(max_length=64)
范例说明:
上边代码非常直白。每个模型被表示为 django.db.models.Model 类的子类(上边子类模型为blog模型)。每个模型有一些类变量,它们都表示模型里的一个数据库字段。
每个字段都是 Field 类的实例
。比如,字符字段被表示为 CharField ,日期时间字段被表示为 DateTimeField 。这将告诉 Django 每个字段要处理的数据类型。每个 Field 类实例变量的名字(例如 use_rname 或 user_password )也是字段名
,所以最好使用对机器友好的格式。你将会在 Python 代码里使用它们,而数据库会将它们作为列名定义某些 Field 类实例需要参数
。例如 CharField 需要一个 max_length 参数。这个参数的用处不止于用来定义数据库结构,也用于验证数据 。
好了,我们登陆mysql查看结果
mysql> show tables;
+----------------------------+
| Tables_in_s22 |
+----------------------------+
| app01_book |
| 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 |
+----------------------------+
11 rows in set (0.00 sec)
在 app01的migrations下面放的是改动的记录,不能登陆到数据库上面直接操作,否则这些记录会变乱
5.2 通过模型类操作数据表
使用项目shell的命令
python manage.py shell
以下为在相互shell终端中演示:
(1)导入模型类
from booktest.models import BookInfo
(2)向booktest_bookinfo表中插入一条数据。
b = BookInfo() #定义一个BookInfo类的对象
b.btitle = '天龙八部' #定义b对象的属性并赋值
b.bpub_date = date(1999,2,23)
总结起来,diango操作mysql数据库,包括以下几步:
用sql语句建个数据库,也就是命令登陆MySQL 使用create新建database;
告诉django去哪里连接数据库,在
settIngs.py中设置DATABASES
;将这个app添加到
settings.py的INSTALLED_APP
中;告诉django使用pymysql连接MySQL数据库
project/__init__.py
;在app/models.py文件中,根据语法,创建类;
在命令行终端,进入到项目所在的路径,然后执行命令python manage.py makemigrations来生成迁移脚本文件;
同样在命令行中,执行命令python manage.py migrate来将迁移脚本文件映射到数据库中。
附录:ORM模型介绍
ORM,全称object relational Mapping,中文叫做【对象关系映射】,通过ORM我们可以通过类的方式去操作数据库,而不用再写原生的SQL语句。
通过把 【表映射成类,行作为实例,字段作为属性】 ,ORM在执行对象操作的时候最终还是会把对应的操作转换为数据库原生语句。
ORM 对象关系映射
ORM 对象关系映射表 | Mysql对应内容 | 修改Django对应文件 |
---|---|---|
类 | 表 | models.py文件 |
对象 | 记录 | views.py文件 |
属性 | 字段 | models.py文件 |
MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动。
类对象—>sql—>pymysql—>mysql服务端—>磁盘,orm其实就是将类对象的语法翻译成sql语句的一个引擎
使用ORM有许多的优点:
- 易用性:使用ORM做数据库的开发可以有效的减少重复SQL语句的概率,写出来的模型也更加直观、清晰。
- 性能损耗小:ORM转换成底层数据库操作指令确实会有一些开销。但从实际的情况来看,这种性能损耗很少,只要不是对性能有严苛的要求,综合考虑开发效率、代码的阅读性,带来的好处要远远大于性能损耗,而且项目越大作用越明显。
- 设计灵活:可以轻松的写出复杂的查询。
- 可移植性:Django封装了底层的数据库实现,支持多个关系数据库引擎,包括流行的Mysql等。可以非常轻松的切换数据库。
#sql中的表 #创建表:CREATE TABLE employee( id INT PRIMARY KEY auto_increment , name VARCHAR (20), gender BIT default 1, birthday DATA , department VARCHAR (20), salary DECIMAL (8,2) unsigned, );#sql中的表纪录 #添加一条表纪录: INSERT employee (name,gender,birthday,salary,department) VALUES ("alex",1,"1985-12-12",8000,"保洁部"); #查询一条表纪录: SELECT * FROM employee WHERE age=24; #更新一条表纪录: UPDATE employee SET birthday="1989-10-24" WHERE id=1; #删除一条表纪录: DELETE FROM employee WHERE name="alex" 编辑model.py文件
#python的类
class Employee(models.Model):id=models.AutoField(primary_key=True)name=models.CharField(max_length=32)gender=models.BooleanField()birthday=models.DateField()department=models.CharField(max_length=32)salary=models.DecimalField(max_digits=8,decimal_places=2)编辑views.py文件
#python的类对象#添加一条表纪录:emp=Employee(name="alex",gender=True,birthday="1985-12-12",epartment="保洁部")emp.save()#查询一条表纪录:Employee.objects.filter(age=24)#更新一条表纪录:Employee.objects.filter(id=1).update(birthday="1989-10-24")#删除一条表纪录:Employee.objects.filter(name="alex").delete()
参考链接:
jango–数据库操作–ORM模型创建和映射
django连接mysql数据库以及建表操作
在【应用apps合集文件,如./apps】下执行相关操作:django使用Mysql数据库以及自动建表
Python Web开发框架之Django篇——二、Django连接MySQL数据库以及建表的操作相关推荐
- django2 mysql驱动_Django框架学习(二)Django连接Mysql数据库,实现表的增删改查
创建一个Django项目 方法: 1.使用 django-admin.py 管理工具来创建项目 2.用Pycharm专业版可以直接创建Django 项目 我直接用Pycharm创建的项目,比较简单,也 ...
- dropwizard 连接mysql_Dropwizard(二) hibernate连接Mysql数据库
作者自己没有采用JDBI来连接数据库,而是采用了dropwizard-hibernate 框架连接数据库,并进行处理数据. 结合官网的教程,和git-hub上的例子一步一步的整合. 1.1 导入dro ...
- 1-2.Win10系统利用Pycharm社区版安装Django搭建一个简单Python Web项目的步骤之二
七.在项目下新建 templates 路径 在工程上,右键,添加templates目录 注意*: 此目录下即用来存放我们的html文件: 此目录一般是与app的主目录是平级的.当然也可以建立在app的 ...
- python数据库教程_Python连接mysql数据库及简单增删改查操作示例代码
1.安装pymysql 进入cmd,输入 pip install pymysql: 2.数据库建表 在数据库中,建立一个简单的表,如图: 3.简单操作 3.1查询操作 #coding=utf-8 #连 ...
- python操作数据库教程_Python连接mysql数据库及简单增删改查操作示例代码
1.安装pymysql 进入cmd,输入 pip install pymysql: 2.数据库建表 在数据库中,建立一个简单的表,如图: 3.简单操作 3.1查询操作 #coding=utf-8 #连 ...
- python web开发框架flask_Python Web 开发框架,Flask 与 Django那个更好
本文把 Flask 和 Django 做一个比对,因为我对这两个 Python Web 框架都有实际的开发经验.希望我可以帮助您选择学习哪个框架,因为学习一个框架可能会非常耗时 -- 当然也很有趣! ...
- Python Web开发框架Django
花了两周时间,利用工作间隙时间,开发了一个基于Django的项目任务管理Web应用.项目计划的实时动态,可以方便地被项目成员查看(^_^又重复发明轮子了).从前台到后台,好好折腾了一把,用到:HTML ...
- 我的第一个python web开发框架(11)——工具函数包说明(二)
db_helper.py是数据库操作包,主要有两个函数,分别是read()数据库读操作函数和write()数据库写操作函数.这个包的代码是从小戴同学分享的博文改造过来的. 1 #!/usr/bin/e ...
- python最流行的框架_2020年最流行Python web开发框架(下)
11种2020年流行的Web开发Python框架,接上文 2020年最流行Python web开发框架(上)介绍的,剩下部分在本文里继续详细介绍.当然,Python框架很多很棒,学好Python是打开 ...
最新文章
- 泊松分布与正太分布在指导武器理论方面的使用
- java stringbuilder换行_初遇Java StringBuffer 和 StringBuilder 类利用 StringBuilder 给TextView实现换行处理...
- html ajax提交表单实例,Ajax提交表单并接收json实例代码
- 的电路接法_放大电路的三种基本接法分享
- 二叉树的操作(二叉树的创建、先序遍历---先根、中序遍历----先左、后续遍历---后根)
- mmap映射区和shm共享内存的区别总结
- Android之Service
- android适配性报告,关于Android的多种屏幕适配
- 洛谷 2312 / bzoj 3751 解方程——取模
- python发音翻译-python实现在线翻译
- Matlab 绘制 1931 CIE色品图 并标点
- mysql 日志文件_mysql日志文件在哪
- 记一次微信公众号开发过程
- GNU C++ 智能指针5-- 解析_Sp_counted_deleter类
- 功放限幅保护_为什么要对放大器限幅?
- Intellij IDEA里的md5验证
- WAV音频信号文件的相关知识
- ibatis 使用入门
- axios库读不到cookie_axios中cookie跨域及相关配置示例详解
- Android NKD初探
热门文章
- clock wizard 的 fine phase 模式
- server2012域控服务器添加远程用户、以及对域用户修改密码永不过期等策略
- ILRuntime学习
- h5+vant的视频播放横屏
- 明明android已经设置好了调试模式,但是华为手机就是不能真机调试,那么可能是你手机模式没有调好
- UBUNTU 分辨率只有1024x768,800x600两种的解决方法
- 全景拍摄怎么拍?关于vr全景这些拍摄技巧你都知道吗?
- jQuery MiniUI 开发教程 表单控件 数据绑定(一)
- Unity编辑器开发——通过模板创建Lua脚本的两种方式(一)
- linux中scsi驱动程序,探索 Linux 通用 SCSI 驱动器