从0开始的django项目实战(3)ORM与数据库操作
我们前后端开发,肯定要操作数据库。那么django里我们怎么操作数据库捏?
手动切换到数据库环境,然后敲入SQL语句?你知道这是个笑话!
我们是程序员,讲的是自动化,实现的是Python环境下的操作,所以我们必然是通过写Python代码的方式。可是....Python和数据库语言SQL是两码事啊,它根本操作不了数据库!没关系,我们可以在Python代码中嵌入SQL语句。
比如下面的方式:
# 创建连接,这里先忽略创建方法
conn = ......
# 创建游标
cursor = conn.cursor()
# 执行SQL并返回
effect_row = cursor.execute("insert into host (hostname,port,ip) values('ubuntu','22','10.0.0.2');")
# 提交,不然无法保存新建或者修改的数据
conn.commit()
# 关闭游标
cursor.close()
# 关闭连接
conn.close()
Python怎么创建和数据库的连接呢?或者更直白的说Python怎么连接数据库呢?可以使用类似mysqlclient这一类的第三方模块(针对不同的数据库,有不同的模块)。于是我们可以进行如下的连接:
from MySQLdb import _mysql
conn = _mysql.connect(host='137.78.5.130', port=3306, user='root', passwd='123456', db='test')
(注意,官方已经不推荐使用pymysql库了)
好了,这样似乎就Ok了。但是,如果你有很多的数据库操作,并且你的Python程序员不是专业的DBA,写的SQL语句很烂,甚至经常写错,怎么办?
聪明的人想出了一个办法:用Python语法来写,然后使用一个中间工具将Python代码翻译成原生的SQL语句,这样你总不会写错了吧?这个中间工具就是所谓的ORM(对象关系映射)!
ORM将一个Python的对象映射为数据库中的一张关系表。它将SQL封装起来,程序员不再需要关心数据库的具体操作,只需要专注于自己本身代码和业务逻辑的实现。
ORM优势
(1)只需要面向对象编程, 不需要面向数据库编写代码.
对数据库的操作都转化成对类属性和方法的操作.
不用编写各种数据库的sql语句.
(2)实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异.
不在关注用的是mysql、oracle...等.
通过简单的配置就可以轻松更换数据库, 而不需要修改代码.
模型
一个模型(model)就是一个单独的、确定的数据信息源,包含了数据的字段和操作方法。通常,每个模型映射为一张数据库中的表。
基本的原则如下:
- 每个模型在Django中的存在形式为一个Python类
- 每个类都是
django.db.models.Model的子类 - 模型(类)的每个字段(属性)代表数据表的某一列
- Django自动为你生成访问数据库的API
下面的模型定义了一个“人”,它具有first_name和last_name字段:
from django.db import models
class Person(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
每一个字段都是一个类属性,每个类属性表示数据表中的一个列。
上面的代码,相当于下面的原生SQL语句:
CREATE TABLE myapp_person (
"id" bigint NOT NULL PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY,
"first_name" varchar(30) NOT NULL,
"last_name" varchar(30) NOT NULL
);
实现用户模型
回到我们的登陆界面项目中。
创建APP
运行
python manage.py startapp login
创建login这个app。
按照上面的步骤操作完后,login应用就创建成功了,让我们看一下Pycharm中的目录结构:

设计模型
进入login/models.py文件,这里将是我们整个login应用中所有模型的存放地点,代码如下:
from django.db import models
# Create your models here.
class User(models.Model):
name = models.CharField(max_length=128)
password = models.CharField(max_length=128)
设置数据库后端
定义好了模型后,就必须选择我们用来保存数据的数据库系统。Django支持Mysql,SQLite,Oracle等等。
这里我们使用mysql,如果你的电脑没有安装mysql和navicat,请STFW!
Django中对数据库的设置在settings.py文件中,如下部分:
# Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
Django默认使用SQLite数据库,并内置SQLite数据库的访问API,也就是说和Python一样原生支持SQLite。本项目使用SQLite作为后端数据库,因此不需要修改settings中这部分内容。如果你想要使用别的数据库,请自行修改该部分设置。
注册app
每次创建了新的app后,都需要在全局settings.py中注册,这样Django才知道你有新的应用上线了。在settings的下面部分添加‘login’,建议在最后添加个逗号。
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'login',
]
创建记录和数据表
app中的models建立好了后,并不会自动地在数据库中生成相应的数据表,需要你手动创建。
进入Pycharm的terminal终端,执行下面的命令:
python manage.py makemigrations
Django自动为我们创建了login\migrations\0001_initial.py文件,保存了我们的第一次数据迁移工作,也就是创建了User模型。
接着执行下面的命令:
python manage.py migrate
Django将在数据库内创建真实的数据表。
修改数据库
一切app的行为都在view.py文件里写成函数。
我们打开view.py,在里面写入:
from django.shortcuts import render,redirect
# Create your views here.
from login.models import User
from django.http import HttpResponse
def addAdmin(request):
user=User(name='admin',password='123456')
user.save()
return HttpResponse('<p>用户创建成功!<p>')
这个函数会出创建一个User对象,把他保存在数据库里,可以看到有了save() 函数,保存变得十分简单,不用写SQL语句也可以操作数据库了!
事情还没完!定义了视图函数,还需要把他写入路由!
打开mysite/urls.py,在里面写入:
from django.contrib import admin
from django.urls import path,include
from login import views
urlpatterns = [
path('admin/', admin.site.urls),
path('add/',views.addAdmin),
]
启动django项目,在浏览器输入localhost:8000/add/
出现如下图片

说明你的model可以正常运行了,恭喜,你已经基本掌握了django的数据库操作与ORM模型,这是你开发出可重用的卓越网站的重要一步!
更多推荐
所有评论(0)