我们前后端开发,肯定要操作数据库。那么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_namelast_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模型,这是你开发出可重用的卓越网站的重要一步!

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐