django框架学习(数据库)

Django为多种数据库后台提供了统一的调用API。根据需求不同,Django可以选择不同的数据库后台。MySQL算是最常用的数据库。我们这里将Django和MySQL连接;

一、mysql驱动

使用的sql连接包不同,Python2.x 版本要安装mysql-python,而Python3.x版本要安装 mysqlclient ;

py文件输入:import MySQLdb     

若未报错则安装成功!

或者使用pymysql,如下操作:

在APP中的__init__.py文件中添加代码:

import pymysql
pymysql.install_as_MySQLdb()

如果在下面第四步时报错:mysqlclient 1.3.13 or newer is required; you have 0.9.3.

则可修改部分文件代码可解决,参考来源:https://blog.csdn.net/weixin_33127753/article/details/89100552

二、mysql用户创建和赋权

1、启动mysql:  mysql -u root -p
2、建库:    CREATE DATABASE villa DEFAULT CHARSET=utf8;
3、创建账户:  create user '用户名'@'访问主机' identified by '密码';
  create user 'yinwenbin'@'localhost' identified by 'password';
4、赋予权限:  grant 权限列表 on 数据库.* to '用户名'@'访问主机' ;(修改权限时在后面加with grant option)
grant SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES
on villa.* TO 'yinwenbin'@'localhost';
grant all privileges on villa.* TO '用户名'@'localhost';
//刷新系统权限表,否则会出现拒绝访问
flush privileges;

三、settings设置

1、在settings.py中,将DATABASES对象更改为:

DATABASES = {
    # 'default': {
    #     'ENGINE': 'django.db.backends.sqlite3',
    #     'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    # }
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'villa',
        'USER': 'yinwenbin',
        'PASSWORD': 'password',
        'HOST':'localhost',
        'PORT':'3306',
    }
}

MySQL是关系型数据库。但在Django的帮助下,我们不用直接编写SQL语句。
Django将关系型的表(table)转换成为一个类(class)。而每个记录(record)是该类下的一个对象(object)。

四、models.py设置

class Character(models.Model):
    name = models.CharField(max_length=200)
    def __unicode__(self):
        return self.name

类Character定义了数据模型,它需要继承自models.Model。
在MySQL中,类是一个表。表只有一列name,是类的属性。  可以看到,name是字符类型,最大长度为200。
类Character有一个__unicode__()方法,用来说明对象的字符表达方式。如果是Python 3,定义__str__()方法,实现相同的功能。

五、同步DB

Django根据models.py中描述的数据模型,在MySQL中真正的创建各个关系表:
以下命令适用django1.9版本及以上
先执行  python manage.py makemigrations
再执行  python manage.py migrate
同步数据库后,Django将建立相关的MySQL表格

六、查询DB数据并使用

1、在Character表中name列插入Sidney 、Django 、John三条数据

2、在views.py编辑相应的方法如下

def operationDB(request):
    #objects是是django默认的管理器对象,自己也可以在Character类下设置:objects=models.Manage()
    data=Character.objects.all()
    staff_str = list(map(lambda a:a.name, data))
    return HttpResponse("<p>" + ' '.join(staff_str) + "</p>")

3、在mysite下的urls.py加上上面步骤的路径,然后访问即可查看效果

练习1:

1、home.html文件修改

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我的第一个网页</title>
</head>

<body>
<a href="/add/4/5/">计算 4+5</a>
<h1>{{ label }}</h1>
</body>
</html>

2、views

def index2(request):
    data = Character.objects.all()
    staff_str = list(map(lambda a: a.name, data))
    context = {}
    context['label'] = ' '.join(staff_str)
    return render(request,'home.html',context)

练习2

1、for.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>我的第二个网页</title>
</head>

<body>

{% for item in staffs %}
<p>{{ item.id }}, {{item}}</p>
{% endfor %}

</body>
</html>

2、views

def operationDB(request):
    #objects是是django默认的管理器对象,自己也可以在Character类下设置:objects=models.Manage()
    data=Character.objects.all()
    #staff_str = list(map(lambda a:a.name, data))
    #return HttpResponse("<p>" + ' '.join(staff_str) + "</p>")
    return render(request,'for.html',{"staffs":data})
原文地址:https://www.cnblogs.com/yinwenbin/p/11826036.html