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.

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

2、也可以在__init__.py文件修改如下,提示需要什么版本,下面就改成什么版本

import pymysql
pymysql.version_info=(1,4,0,"final",0)
pymysql.install_as_MySQLdb()

二、mysql用户创建和赋权

1、启动mysql:  mysql -u root -p
2、建库:    CREATE DATABASE villa DEFAULT CHARSET=utf8;
3、创建账户:  create user '用户名'@'访问主机' identified by '密码';
  create user '用户名'@'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';
5、刷新系统权限表,否则会出现拒绝访问
flush privileges;

三、settings设置

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

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

四、models.py设置

class project(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=200)
    desc = models.CharField(max_length=200)
    leader = models.CharField(max_length=200)
    tester = models.CharField(max_length=200)
    programmer = models.CharField(max_length=200)
    publish_app = models.CharField(max_length=200)
    create_time = models.DateTimeField(auto_now_add=True)
    update_time = models.DateTimeField(auto_now=True)

    def to_dict(self):
        return {'id': self.id,
                'name': self.name,
                'desc': self.desc,
                'leader': self.leader,
                'tester': self.tester,
                'programmer': self.programmer,
                'publish_app': self.publish_app,
                'create_time': self.create_time.strftime('%Y-%m-%d %H:%M:%S'),
                'update_time': self.update_time.strftime('%Y-%m-%d %H:%M:%S')}

 

1、类Character定义了数据模型,它需要继承自models.Model。
2、通过ORM的方式对数据库进行操作
3、类Character有一个__unicode__()方法,用来说明对象的字符表达方式。如果是Python 3,定义__str__()方法,实现相同的功能。

五、数据迁移(是指model的信息,不是指具体的数据)

官网解释比较清楚:https://docs.djangoproject.com/en/4.0/intro/tutorial02/

迁移非常强大,可让您在开发项目时随时间更改模型,而无需删除数据库或表并创建新表 - 它专门用于实时升级数据库,而不会丢失数据。我们将在本教程的后面部分更深入地介绍它们,但现在,请记住进行模型更改的三步指南:
1、更改您的模型(models.py)
2、运行为这些更改创建迁移    python manage.py makemigrations
3、运行以将这些更改应用到数据库   python manage.py migrate

linux环境执行的时候报错:raise RuntimeError("cryptography is required for sha256_password or caching_sha2_password")

解决办法

 

pip install cryptography

 

posted @ 2019-11-09 15:12  whitewall  阅读(255)  评论(0)    收藏  举报