关于建设网站的图片素材,数字媒体艺术就业方向,物流网站的建设方案总结,大学生编程培训机构比较有用 转自 http://blog.csdn.net/fgf00/article/details/53678205 一、DjangoORM 创建基本类型及生成数据库表结构 1、简介 2、创建数据库 表结构 二、Django ORM基本增删改查 1、表数据增删改查 2、表结构修改 三、Django ORM 字段类型 1、字段类型介绍 2、字段参数介绍 3…比较有用 转自 http://blog.csdn.net/fgf00/article/details/53678205 一、DjangoORM 创建基本类型及生成数据库表结构 1、简介 2、创建数据库 表结构 二、Django ORM基本增删改查 1、表数据增删改查 2、表结构修改 三、Django ORM 字段类型 1、字段类型介绍 2、字段参数介绍 3、Django ORM 外键操作 一、DjangoORM 创建基本类型及生成数据库表结构 1、简介 ORM关系对象映射。定义一个类自动生成数据库的表结构。 创建数据库的时候一般有以下几种常用数据类型数字、字符串以及时间。 ORM分为两种 DB First 数据库里先创建数据库表结构根据表结构生成类根据类操作数据库Code First 先写代码执行代码创建数据库表结构主流的orm都是code first。django 的orm也是code first所以学的时候本质就分为两块 根据类自动创建数据库表根据类对数据库表中的数据进行各种操作2、创建数据库 表结构 先写类app下models.py文件 from django.db import models class UserInfo(models.Model): # 必须继承models.Model # 不写则django默认创建ID列自增主键 # 用户名列字符串类型指定长度 username models.CharField(max_length32) password models.CharField(max_length64) 注册APP执行命令python manage.py makemigrations会提示No changes detected这是因为执行命令时会找所有models但是django不知道找哪个所有需要指定一下。 settings.py INSTALLED_APPS [ django.contrib.admin, django.contrib.auth, django.contrib.contenttypes, django.contrib.sessions, django.contrib.messages, django.contrib.staticfiles, app01, # 这里添加app] 执行命令生成表结构python manage.py makemigrations # 生成migrations临时文件python manage.py migrate # 根据migrations直接生成数据库12执行后从migrations便会产生操作记录。生成数据库默认情况下用的sqlite3。可以用navicat等软件直接打开。 db.sqlite3里面包含缓存、session、cookie、静态文件以及后台管理。像咱们创建的表名叫app01_userinfo 连接mysql数据库如果不使用sqlite使用mysql数据库。代码不用改、命令也不用改只需要改下配置文件。 # https://docs.djangoproject.com/en/1.10/ref/settings/#databases 官网文档# DATABASES { # sqlite 默认# default: {# ENGINE: django.db.backends.sqlite3,# NAME: os.path.join(BASE_DIR, db.sqlite3),# }# }DATABASES { # mysql default: { ENGINE: django.db.backends.mysql, NAME: mydatabase, USER: mydatabaseuser, PASSWORD: mypassword, HOST: 127.0.0.1, PORT: 3306, }} 注意 数据库名django不能创建需要自己提前创建 Django默认使用MySQLdb模块链接MySQL但python3现在还没有MySQLdb所以改为用pymysql去连。在project项目名下的__init__.py里面 import pymysqlpymysql.install_as_MySQLdb()12二、Django ORM基本增删改查 1、表数据增删改查 urls.py url(r^orm/, views.orm),1app01/views.py from app01 import models # 导入models模块def orm(request):# 创建数据 # 第一种方式 # models.UserInfo.objects.create(usernameroot,password123) # 第二种方式 # obj models.UserInfo(usernamefzh, passwordiajtag) # obj.save() # 第三种方式 # dic {username:fgf, password:666} # models.UserInfo.objects.create(**dic) # 查询数据 # result models.UserInfo.objects.all() # 查询所有为QuerySet类型可理解成列表 # result models.UserInfo.objects.filter(usernamefgf,password666) # 列表 # result models.UserInfo.objects.filter(usernamefgf).first() # 对象 # 条件查询。filter 相当于where查询条件里面的会组成and条件 # for row in result: # 打印查询到数据。 # print(row.id,row.username,row.password) # 查看QuerySet类型具体做了什么事情可以 print(result.query) # 删除数据 # models.UserInfo.objects.all().delete() # 删除所有 # models.UserInfo.objects.filter(id4).delete() # 删除所有 # 更新数据 # models.UserInfo.objects.all().update(password8888) # models.UserInfo.objects.filter(id3).update(password888888) return HttpResponse(orm) 2、表结构修改 修改列把最初定义的类中字段password models.CharField(max_length64)改为password models.CharField(max_length60)。重新执行python manage.py makemigrationspython manage.py migrate则数据表结构更改了。如果列内内容超过定义大小则数据就丢了。 增加一列类中增加一列执行命令会有提示信息因为默认情况下是不允许为空的。这里提供两个选项。 输入一个值新增列已存在的行默认加上输入的内容。email models.CharField(max_length32, nullTrue)允许为空查看表结构变化时刷新看不出来需要重新打开表看效果。 删除列类内删掉相应的字段执行命令即可。 三、Django ORM 字段类型 1、字段类型介绍 Django ORM 字段类型中有CharField、EmailField、URLField、GenericIPAddressField等实际上在数据库里都是字符串。不能做检查语法做不了验证。那这个有什么用呢 这些是给Django 的 admin 用的。在admin那个网页上做验证。如果不用admin那那些都是字符串效果都一样。 自定义自增列models.AutoField(primary_keyTrue) 1、models.AutoField 自增列 int(11) 如果没有的话默认会生成一个名称为 id 的列如果要显示的自定义一个自增列必须将给列设置为主键 primary_keyTrue。2、models.CharField 字符串字段 必须 max_length 参数3、models.BooleanField 布尔类型tinyint(1) 不能为空BlankTrue4、models.ComaSeparatedIntegerField 用逗号分割的数字varchar 继承CharField所以必须 max_lenght 参数5、models.DateField 日期类型 date 对于参数auto_now True 则每次更新都会更新这个时间auto_now_add 则只是第一次创建添加之后的更新不再改变。6、models.DateTimeField 日期类型 datetime 同DateField的参数7、models.Decimal 十进制小数类型 decimal 必须指定整数位max_digits和小数位decimal_places8、models.EmailField 字符串类型正则表达式邮箱 varchar 对字符串进行正则表达式9、models.FloatField 浮点类型 double10、models.IntegerField 整形11、models.BigIntegerField 长整形 integer_field_ranges { SmallIntegerField: (-32768, 32767), IntegerField: (-2147483648, 2147483647), BigIntegerField: (-9223372036854775808, 9223372036854775807), PositiveSmallIntegerField: (0, 32767), PositiveIntegerField: (0, 2147483647), }12、models.IPAddressField 字符串类型ip4正则表达式(已弃用用13、)13、models.GenericIPAddressField 字符串类型ip4和ip6是可选的 参数protocol可以是both、ipv4、ipv6 验证时会根据设置报错14、models.NullBooleanField 允许为空的布尔类型15、models.PositiveIntegerFiel 正Integer16、models.PositiveSmallIntegerField 正smallInteger17、models.SlugField 减号、下划线、字母、数字18、models.SmallIntegerField 数字 数据库中的字段有tinyint、smallint、int、bigint19、models.TextField 字符串longtext20、models.TimeField 时间 HH:MM[:ss[.uuuuuu]]21、models.URLField 字符串地址正则表达式22、models.BinaryField 二进制23、models.ImageField 图片24、models.FilePathField 文件 如上那么多的字段可大致分为 字符串、数字、时间、二进制、自增primary_keyTrue几类。 2、字段参数介绍 数据库中的字段参数null # 是否可以为空default # 默认值primary_key # 主键db_column # 列名db_index # 索引(db_indexTrue)unique # 唯一索引(uniqueTrue)unique_for_date # 只对日期索引unique_for_month # 只对月份索引unique_for_year # 只对年做索引auto_now # 创建时自动生成时间auto_now_add # 更新时自动更新为当前时间 # 更新时间不支持这种 obj UserGroup.objects.filter(id1).update(captionCEO) obj UserGroup.objects.filter(id1).first() # 自动更新时间需要这样写 obj.caption CEO obj.save() 以下是只针对admin的字段参数choices # 作用1、django admin中显示下拉框2、避免连表查询1 user_type_choices ( # 数据库只存1、2、3后面的信息存在内存里。 (1, 超级用户), (2, 普通用户), (3, 普普通用户), ) user_type_id models.IntegerField(choicesuser_type_choices,default1) blank # django admin是否可以为空verbose_name # django admin显示字段中文editable # django admin是否可以被编辑error_messages # 错误信息 # error_messages{required:密码不能为空,} # 注意必须有逗号help_text # django admin提示validators # django form ,自定义错误信息 python manage.py createsuperuser # 创建 Django 用户 3、Django ORM 外键操作 连表关系之一对多models.ForeignKey(ColorDic) models.py 表关联class UserGroup(models.Model): uid models.AutoField(primary_keyTrue) caption models.CharField(max_length32,uniqueTrue) ctime models.DateTimeField(auto_now_addTrue, nullTrue) uptime models.DateTimeField(auto_nowTrue, nullTrue) class UserInfo(models.Model): username models.CharField(max_length32,blankTrue,verbose_name用户名) password models.CharField(max_length60, help_textpwd) email models.CharField(max_length60) test models.EmailField(max_length19,nullTrue,error_messages{invalid: 请输入密码,}) # UserInfo表中没有user_group字段而是 user_group_id 列 值为 uid 数字 user_group models.ForeignKey(UserGroup,to_fielduid) # 外键关联 ********** 数据查询user_list Userinfo.objects.all() # 获取Userinfo对象for row in user_list: # print(row.user_group_id) # 数据库里真实存在的数据 # user_group代指UserGroup对象。类UserGroup对象里封装了uid,catption,ctime,uptime print(row.user_group.uid) # 通过对象获取uid和user_group_id一样 print(row.user_group.caption) # 通过对象获取caption 创建数据UserInfo表创建数据怎么写呢 models.UserInfo.objects.create( usernameroot1, password123, emailasdfasdf, testasdfasdf, # 第一种方式再次查询数据库不推荐 # user_group models.UserGroup.objects.filter(id1).first() # 第二种方式通过 外键字段_id user_group_id 1 ) null - db是否可以为空 default - 默认值 primary_key - 主键 db_column - 列名 db_index - 索引 unique - 唯一索引 unique_for_date - unique_for_month unique_for_year auto_now - 创建时自动生成时间 auto_now_add - 更新时自动更新为当前时间 # obj UserGroup.objects.filter(id1).update(captionCEO) # obj UserGroup.objects.filter(id1).first() # obj.caption CEO # obj.save() choices - django admin中显示下拉框避免连表查询 blank - django admin是否可以为空 verbose_name - django admin显示字段中文 editable - django admin是否可以被编辑 error_messages - 错误信息欠 help_text - django admin提示 新建和更新时间字段 ctime models.DateTimeField(auto_now_addtrue,nulltrue) uptime models.DateTimeField(auto_nowtrue,nulltrue) 模板中这种用row.b__caption 来获取值转载于:https://www.cnblogs.com/testway/p/7552521.html