用 Django 管理数据库

1. 用 Django 管理数据库

本模板是基于Django访问MySQL数据库,Django 的数据库接口非常好用,我们甚至不需要知道SQL语句如何书写,就可以轻松地查询,创建一些内容,所以有时候想,在其它的地方使用Django的 ORM呢?它有这么丰富的 QuerySet API.

2. 环境要求:

  • 首先需安装 Python 3.5.2 版本,建议安装: Anaconda3-4.1.1-Windows-x86_64 ,自带 Python 3.5.2

  • 数据库采用流行的 MySQL 数据库,请自行安装,我采用远程服务器, setting 文件配置如下:

    DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.mysql',
              'NAME': 'cis_lib',
              'USER': 'admin',
              'PASSWORD': '123456',
              'HOST': 'SERVERS1',
              'PORT': '3306',
          },
      }
      
  • 由于采用了 MySQL 数据库,因此需要安装 pymysql

      pip install pymysql
      我安装的版本为:PyMySQL (0.9.2)
    

    并需要在Django工程目录下**__init__.py**文件中增加以下两句话:

      import pymysql
      pymysql.install_as_MySQLdb()
    

    这一步暂时保留,因为模板中没有加入也可以正常使用。

  • 最后安装 Django2.1 版本:

      pip install django==2.1
    

    以下命令测试是否安装成功:

      import django
      print(django.get_version())
      输出 2.1 表示 2.1 版本安装成功
    

3. 基本命令:

  • 新建一个 django project

      django-admin.py startproject [project_name]
      如果报错,尝试用 django-admin startproject [project_name] 试试
    
  • 新建 APP,cd [project_name] 然后执行下面的命令

      python manage.py startapp [app_name]
      或 django-admin.py startapp [app_name]
    
  • 创建数据库表 或 更改数据库表或字段

      1. 创建更改的文件
      python manage.py makemigrations
      2. 将生成的py文件应用到数据库
      python manage.py migrate
    
  • 启动开发服务器

      python manage.py runserver
       
      当提示端口被占用的时候,可以用其它端口:
      python manage.py runserver 8001
      python manage.py runserver 9999
      (当然也可以kill掉占用端口的进程,具体后面有讲,此处想知道的同学可查下 lsof 命令用法)
       
      监听机器所有可用 ip (电脑可能有多个内网ip或多个外网ip)
      python manage.py runserver 0.0.0.0:8000
      如果是外网或者局域网电脑上可以用其它电脑查看开发服务器
      访问对应的 ip加端口,比如 http://172.16.20.2:8000
    
  • 清空数据库

      python manage.py flush
    
  • 创建超级管理员

      python manage.py createsuperuser
       
      按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填
    
  • 修改用户密码:

      python manage.py changepassword [username]
    
  • 导出数据 导入数据

      python manage.py dumpdata appname > appname.json
      python manage.py loaddata appname.json
    
  • Django终端

      python manage.py shell
    
  • 数据库命令行

      python manage.py dbshell
    
  • 查看命令列表

      python manage.py
    

这里我们主要使用的命令有:

	1. 创建更改的文件
	python manage.py makemigrations
	2. 将生成的py文件应用到数据库
	python manage.py migrate

4. Django模块属性与方法

django.urls

reverse

reverse 接收 url 中的 name 作为第一个参数,我们在代码中就可以通过 reverse() 来获取对应的网址(这个网址可以用来跳转,也可以用来计算相关页面的地址),只要对应的 url 的name不改,就不用改代码中的网址。python引用举例:

from django.urls import reverse
reverse('add1', args=(4,5))
u'/add/4/5/'
reverse('add2', args=(444,555))
u'/add/444/555/'

url 写法:

urlpatterns = [
path('add/<a>/<b>/', clac1_views.add, name='add1'),
]

path

path函数定义

path(route, view, kwargs=None, name=None)

例子

from django.urls import path
urlpatterns = [
	path('', learn_views.index, name = 'learn'),
	path('add/<a>/<b>/', clac1_views.add, name='add1'),
]

name参数是为这个路由起的名字,可以用 django.url.reverse 函数或者 在html中直接调用,
下面举例说明在html中的引用方法:

	<a href="/add/4/5/">  |penguin 计算 4+5|   </a>

不带参数引用格式: {% url 'name' %},name表示路由名称。
	<a href="{% url 'learn' %}">    |学习|   </a>

带参数引用格式: {% url 'name' 参数1 参数2 %} ,多个参数用空格隔开
	<a href="{% url 'add1' 12 100 %}">    |计算 12 + 100|   </a>

html执行结果:

|penguin 计算 4+5| |学习| |计算 12 + 100|

在html中点击相应的标签,就可以进行进行对应计算或跳转到对应地址。

django.shortcuts

render

网页渲染,使用举例:

render(request, 'home.html', {'string001':'我是中国人'})

渲染 home.html,并向网页传递 string001 参数。

在网页代码body的起始位置中加入 {{string001}} 获取引用,结果如下:

我是中国人 |penguin 计算 4+5| |学习| |计算 12 + 100|

在网页中用for循环,显示传入的列表:

def index(request):
    tlist = ["HTML", "CSS", "jQuery", "Python", "Django"]
    return render(request, 'home.html', {'string001': "I'm chinese !", 'l': tlist})

网页代码:

{{string001}}

{% for i in l %}
{{ i }}
{% endfor %}

结果: I’m chinese ! HTML CSS jQuery Python Django

举一反三:也可以进行传递字典参数,遍历字典等等。

5. Django数据库操作

创建数据库对象

数据库操作前,首先需要在 app 中 的 models.py 文件中创建数据库对象:

from django.db import models

# 在数据库增加一个表,表名为: [app名]_[类名]
class Person(models.Model):

	# Person 类的属性 name 和 age 作为表头,并自动增加 id 表头。

	# CharField表示字符串,max_length=30表示数据长度<=30,即:varchar(30)
	name = models.CharField(max_length=30)

	# IntegerField表示int型数据
	age = models.IntegerField()

然后输入下列命令,同步数据库

1. 创建更改的文件
python manage.py makemigrations

2. 将生成的py文件应用到数据库
python manage.py migrate

写数据库的几种方法

#导入类
from index.models import Person

方法1:
    s = Person()
    s.name = 'jj'
    s.age = 88
    s.save()
方法2:
	s = Person(name='jk',age=200)
	s.save()
方法3:
	Person.objects.create(name=name,age=age)
	这种方法可避免重复写入,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为True或False, 若已经存在相同数据时返回False.

读数据库的几种方法

方法1:
# 获取所有内容
ps = Person.objects.all()

# 获取前10个内容
ps = Person.objects.all()[:10]

#可以通过 ps[序号].name 属性类获取name
#可以通过 ps[序号].age 属性类获取age

方法2:
# 获取name为'WZT'的内容
p = Person.objects.get(name='WZT')

# 获取id为5的内容
p = Person.objects.get(id=5)

#可以通过 p.name 属性类获取name
#可以通过 p.age 属性类获取age

条件读取:

Person.objects.filter(name="abc")  # 等于Person.objects.filter(name__exact="abc") 名称严格等于 "abc" 的人

Person.objects.filter(name__iexact="abc")  # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC,这些都符合条件


Person.objects.filter(name__contains="abc")  # 名称中包含 "abc"的人

Person.objects.filter(name__icontains="abc")  #名称中包含 "abc",且abc不区分大小写


Person.objects.filter(name__regex="^abc")  # 正则表达式查询

Person.objects.filter(name__iregex="^abc")  # 正则表达式不区分大小写

条件排除读取:

filter是找出满足条件的,当然也有排除符合某条件的

Person.objects.exclude(name__contains="WZ")  # 排除包含 WZ 的Person对象

Person.objects.filter(name__contains="abc").exclude(age=23)  # 找出名称含有abc, 但是排除年龄是23岁的

6. 使用方法

将该文件夹直接作为工程模板,文件说明:

main.py 文件为程序主入口文件。

manage.py 必备文件,用来支持数据库融合等命令

settings.py 配置文件

Entity为应用文件夹,其下的 migrations 文件夹必须存在,否则无法创建数据库表

models.py 为数据库接口

models.py

在本文件中创建的每个继承models.Model的类,都相当于在数据库中的一个表

#构造ORM的对象
class Animal_json(models.Model):
    name = models.CharField(db_column=u'name', max_length=255, primary_key=True)
    data_json = models.TextField(db_column=u'data_json')

    def __unicode__(self):
        return 'animal_json'

    class Meta:
        db_table = 'animal_json'

	其中的属性name 、data_json分别表示两个表头

manage.py

在修改了数据库模型的时候,可运行以下命令与数据库进行融合:

1. 创建更改的文件
python manage.py makemigrations

2. 将生成的py文件应用到数据库
python manage.py migrate

如出现意外,可尝试删除数据库中的所有表,并删除Entity\migrations目录下的所有文件进行修复。

settings.py

主要存放数据库的配置

	DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'tt',	#数据库的名称注意修改
        'USER': 'admin',
        'PASSWORD': '123456',
        'HOST': 'SERVERS1',
        'PORT': '3306',
	    },
	}

main.py

主应用程序

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值