Django——orm概述及在django中使用

摘要:
设置好后,再次启动Django项目。目前,我们需要激活mysql。
一、orm概述
1 orm:对象关系映射(跟语言无关)
        数据库中的表     ----》对应程序的一个类
        数据库中的一行数据----》对应程序中的一个对象
2 python中常见orm框架
    -django的orm框架
    -sqlachemy orm框架
    
3 java:(扩展),java中写web项目
    ssh框架 :spring+struts(有漏洞)+hibernate(orm框架) (10年前用的多,现在已经弃用,有些国企还在用)
    ssm框架:spring+springmvc+mybatis(orm框架,可以写原生sql)
    springboot:sb框架 ,已经整合了,把tomcat内置进去了
    springcloud:微服务
4 orm能干的事
    -创建表(不能创建数据库,手动创建数据库)
    -增加删除表内字段
    -增删查改数据

 如果操作mysql,ORM是在pymysq之上又进行了一层封装

Django——orm概述及在django中使用第1张

二、django中orm的使用
0 sqlite:也是要给数据库,文件数据库,一个库就是要给文件,不需要单独安装
    -咱们现在在用,也要用到关系型数据库,不想装mysql,就可以使用sqlite
    -移动开发本地存储数据,存在sqlite中

1 创建个UserInfo表,在models中写一个类
2 表中有字段(类属性),字段有属性,


# 第一步在models中写要给类
    class UserInfo(models.Model):
        # 字段属性--》后面那个对象决定的,
        # 该字段自增,并且是主键
        id = models.AutoField(primary_key=True)
        # 该字段是varchar类型,长度为32(唯一约束,是否是索引,默认值是,是否可以为空)
        name = models.CharField(max_length=32)
        # 密码字段
        #password =models.CharField(max_length=64)  #代表已删除
     
# 增加
#第二步,把表创建出来(执行两个命令就创建出来了)
-python3 manage.py makemigrations # 这条命令会在migrations创建一条记录,数据库变更记录 -python3 manage.py migrate # 把更改同步到数据库
3 增加删除字段
  
  删除字段 首先注释掉要删除的字段,再在terminal中执行第二步里的两个命令就可以了
  增加字段
比如要增加
      #数字类型 默认 1男 2女
      gender=models.IntegerField()
      #省份
      province=models.CharField(max_length=32)
    写好后在terminal中执行那两个命令
会出现可能之前的表里有数据,那么就需要在
      password =models.CharField(max_length=64,null=True)
      gender=models.IntegerField(default=0)
      province=models.CharField(max_length=32,null=True)

  如不想走到那一步,新增字段直接设置(default=默认值 或者 null=True)

  -两条数据库迁移命令(一个是记录,一个是真正的迁移)
  python manage.py makemigrations
  python manage.py migrate

  -插入

  方式一:
  user=UserInfo(name=lqz,age=19)
  user.save()
  方式二:
  user=UserInfo.objects.create(name=lqz,age=19)
-查询所有
UserInfo.objects.all() # 放到列表中[user1,user2,user3]

 参考比较:

Django——orm概述及在django中使用第2张

三、若想将模型转为mysql数据库中的表,需要在settings中配置:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'lili',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'ATOMIC_REQUEST': True,
        'OPTIONS': {
            "init_command": "SET storage_engine=MyISAM",
        }
    }
}
'''
'NAME':要连接的数据库,连接前需要创建好
'USER':连接数据库的用户名
'PASSWORD':连接数据库的密码
'HOST':连接主机,默认本机
'PORT':端口 默认3306
'ATOMIC_REQUEST': True,
设置为True统一个http请求对应的所有sql都放在一个事务中执行(要么所有都成功,要么所有都失败)。
是全局性的配置, 如果要对某个http请求放水(然后自定义事务),可以用non_atomic_requests修饰器 
'OPTIONS': {
             "init_command": "SET storage_engine=MyISAM",
            }
设置创建表的存储引擎为MyISAM,INNODB
'''
 

注意:

NAME即数据库的名字,在mysql连接前该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite3则是项目自动创建 USER和PASSWORD分别是数据库的用户名和密码。
设置完后,再启动我们的Django项目前,我们需要激活我们的mysql。然后,启动项目,会报错:no module named MySQLdb 。
这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb 对于py3有很大问题,所以我们需要的驱动是PyMySQL 所以,我们只需要找到项目名文件下的__init__,在里面写入:
import pymysql pymysql.install_as_MySQLdb()
最后通过两条数据库迁移命令即可在指定的数据库中创建表 : python manage.py makemigrations python manage.py migrate

如果报错如下:

"django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.3 or newer is required; you have 0.7.11.None"


是因为: MySQLclient目前只支持到python3.4,因此如果使用的更高版本的python,需要修改如下:

通过查找路径C:ProgramsPythonPython36-32Libsite-packagesDjango-2.0-py3.6.eggdjangodbackendsmysql
这个路径里的文件把

if version < (1, 3, 3):
     raise ImproperlyConfigured("mysqlclient 1.3.3 or newer is required; you have %s" % Database.__version__)

注释掉就可以了

免责声明:文章转载自《Django——orm概述及在django中使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SQL SERVER 实现多个数据库之间表的联系,利用临时表枚举表中行数据第四章 软件架构演化下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

EFCore数据库迁移命令整理

因为现在用.net core 开发新项目,过程中需要经常涉及到数据命令的迁移,今天分别整EFCore 的两种迁移数据库的方式  1 程序包管理器控制台 , Package Manager Console(PMC)        -如果你用visual studio 开发建议使用PMC迁移方式,该方式是同时支持efcore和原先的ef 迁移的 2 命令行工具...

生物数据库介绍——NCBI

NCBI(National Center for Biotechnology Information,美国国家生物技术信息中心)除了维护GenBank核酸序列数据库外,还提供数据分析和检索资源。NCBI资源包括Entrez、Entrez编程组件、MyNCBI、PubMed、PudMed Central、PubReader、Gene、the NCBI Tax...

UniGUI的SQLite数据库(04)

1]放FDConnection1和FDQuery1到界面上 一定要 放一个 FDPhysSQLiteDriverLink1到ServerModule上 2]在OnFormCreate事件里写 FDQuery1.Connection := FDConnection1;FDConnection1.LoginPrompt:=false; //取消登录提示框...

mysql数据库乱码恢复

mysql数据库字符集不支持导致数据乱码恢复    mysqldump --default-character-set=latin1 -d test >table.sql # -d只导出数据库表结构,不导表数据mysqldump --default-character-set=latin1 -t test > data.sql# -t 只导出数...

Django(多表查询操作)

首先了解一下 mysql中的表之间的关系,一对一,一对多,多对一,多对多。 一对多关系、多对一关系、一对一关系 至少都有一侧是单个实体,所以记录之间的联系通过外键实现,让外键指向这个实体。 实现这种关系时,要在“多”这一侧加入一个外键,指向“一”这一侧联接的记录。 多对多关系 解决方法是添加第三个表,这个表称为关联表。 多对多关系可以分解成原表和关联...

[转]Oracle 创建 DBLink 的方法

http://blog.csdn.net/davidhsing/article/details/6408770 1、如果需要创建全局 DBLink,则需要先确定用户有创建 dblink 的权限: select * from user_sys_privs where privilege like upper('%DATABASE LINK%');    如果...