orm

1. ORM

定义:object relations mapping,对象关系映射。它实现了数据模型与数据库的解耦

当models里的内容发生改变时,每改变一次执行一次下边的两行代码

python manage.py makemigrations #只是生成一个操作记录,类似logging日志

python manage.py migrate #在数据库中进行正正的操作,建表,删表等

python manage.py makemigrations

python manage.py migrate

没有设置时,执行连接Django自带的数据库,sqllite3

mysqldb 不支持python3.4以上版本

执行包文件init文件

django 连接mysql
1 settings配置文件中
	DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'orm02',
            'USER':'root',
            'PASSWORD':'666',
            'HOST':'127.0.0.1',
            'PORT':3306,
        }
    }
2 项目文件夹下的init文件中写上下面内容,用pymysql替换mysqldb
	import pymysql
	pymysql.install_as_MySQLdb()

3 models文件中创建一个类

# class UserInfo(models.Model):
#     id = models.AutoField(primary_key=True)
#     name = models.CharField(max_length=10)
#     bday = models.DateField()
#     checked = models.BooleanField()
4 执行数据库同步指令
# python manage.py makemigrations
# python manage.py migrate

5 创建记录(实例一个对象,调用save方法)
def query(request):
    # 创建一条记录,增

    new_obj = models.UserInfo(
        id=2,
        name='子文',
        bday='2019-09-27',
        checked=1,
    )
    new_obj.save()  #翻译成sql语句,然后调用pymysql,发送给服务端  insert into app01_userinfo values(2,'子文','2019-09-27',1)

    return HttpResponse('xxx')

1. ORM

定义:object relations mapping,对象关系映射。它实现了数据模型与数据库的解耦

每个数据库有自己的sql语句,不通用。

1.将对象翻译成sql语句

2.Django内置的一个pymysql客户端将sql语句发送给mysql服务端

3.服务端拿到sql,到磁盘里面进行数据操作

Django默认数据库为sqlite3,比较鸡肋,设置为mysql数据库修改settings配置文件

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',  #Django中数据库地址
        'NAME':'bms',           # 要连接的数据库名,连接前先cmd建库
        'USER':'root',        # 连接数据库的用户名
        'PASSWORD':'',        # 连接数据库的密码
        'HOST':'127.0.0.1',       # 连接主机,默认本级
        'PORT':3306,            #  端口 默认3306
    }
}

如有必要,可以为自己的项目下的 app 配置单独的数据库,如下代码

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'bms',           # 要连接的数据库,连接前需要创建好
        'USER':'root',        # 连接数据库的用户名
        'PASSWORD':'',        # 连接数据库的密码
        'HOST':'127.0.0.1',       # 连接主机,默认本级
        'PORT':3306            #  端口 默认3306
    },
    'app01': { #可以为每个app都配置自己的数据,并且数据库还可以指定别的,也就是不一定就是mysql,也可以指定sqlite等其他的数据库
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'bms',           # 要连接的数据库,连接前需要创建好
        'USER':'root',        # 连接数据库的用户名
        'PASSWORD':'',        # 连接数据库的密码
        'HOST':'127.0.0.1',       # 连接主机,默认本级
        'PORT':3306            #  端口 默认3306
    }
}

设置完后,再启动我们的Django项目前,我们需要激活我们的mysql。然后,启动项目,会报错:no module named MySQLdb 。

这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb 不支持python3.4以上版本,所以我们需要的驱动是PyMySQL 所以,我们只需要找到项目名文件下的__init__,执行替换命令

import pymysql
pymysql.install_as_MySQLdb()

cmd终端创建数据库,并在pycharm下创建类

3 models文件中创建一个类

# class UserInfo(models.Model):
#     id = models.AutoField(primary_key=True)
#     name = models.CharField(max_length=10)
#     bday = models.DateField()
#     checked = models.BooleanField()

最后通过两条数据库迁移命令即可在指定的数据库中创建表 :

python manage.py makemigrations  
#生成记录,每次修改了models里面的内容或者添加了新的app,新的app里面写了models里面的内容,类似于logging
python manage.py migrate         
#执行上面这个语句的记录来创建表,生成的表名字前面会自带应用的名字,例如:你的book表在mysql里面叫做app01_book表

数据库查看创建的表show tables; desc app02_a; (app名 下划线 类名)

pycharm查看数据库

![

![

通过界面实现增删改查,每次操作后上传

通过代码实现增删改查

#设置主键相同时,新增数据覆盖原有的数据
原文地址:https://www.cnblogs.com/lvweihe/p/11662786.html