1.反射练习

  1. import sys
  2.  
  3. class Person(object):
  4. def __init__(self, name):
  5. self.name = name
  6.  
  7. def eat(self, food):
  8. print("{} 在吃 {}".format(self.name, food))
  9.  
  10. def dream(self):
  11. print("{} 在做白日梦!".format(self.name))
  12.  
  13. s = "person"
  14.  
  15. # 字符串首字母大写
  16. s = s.capitalize()
  17. print(s, type(s))
  18.  
  19. # 打印下当前可用的变量
  20. print(locals()["s"])
  21. print(locals().get("s"))
  22.  
  23. # # 反射
  24. if hasattr(sys.modules[__name__], s):
  25. print("找到了")
  26. the_class = getattr(sys.modules[__name__], s)
  27.  
  28. print(the_class)
  29. obj = the_class(name="赵导")
  30. obj.eat("炒饼")

(1). 通过反射可以用一个函数来实现删除数据库表

  1. #ursl.py
  2. url(r'^delete/([a-zA-Z]+)/(\d+)/$', views.delete),
  3.  
  4. #views.py
  5.  
  6. def delete(request, table_name, delete_id):
  7. print(table_name, delete_id)
  8. # 需要判断一下 表名和id值是否都是正经的数据
  9.  
  10. # models.Book.objects.get(id=1).delete()
  11. # 从另外一个文件 根据字符串 反射具体的变量
  12. table_name = table_name.capitalize() #将字符串首字母大写
  13. if hasattr(models, table_name):
  14. # 如果能找到
  15. table_class = getattr(models, table_name)
  16. try:
  17. table_class.objects.get(id=delete_id).delete()
  18. except Exception as e:
  19. print(str(e))
  20. print("id值不存在!")
  21. return HttpResponse("表名:{} id:{}".format(table_name, delete_id))
  22. else:
  23. return HttpResponse("表不存在!")

2.时间间隔

  实例

  1. import datetime
  2.  
  3. now = datetime.datetime.now() # 你领了一张有效期为7天的优惠券
  4. print(now)
  5. # 时间间隔
  6. d7 = datetime.timedelta(weeks=52)
  7. # 求失效时间
  8. ret = now + d7
  9. print(ret)

3.常用的ORM字段

  1.AutoField                     int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。

  2.IntegerField       一个整数类型,范围在 -2147483648 to 2147483647。

  3.CharField          字符类型,必须提供max_length参数, max_length表示字符长度。

  4.DateField       日期字段,日期格式  YYYY-MM-DD,相当于Python中的datetime.date()实例。

  5.DateTimeField            日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例。

4.不常用ORM字段

    

  1. AutoField(Field)
  2. - int自增列,必须填入参数 primary_key=True
  3.  
  4. BigAutoField(AutoField)
  5. - bigint自增列,必须填入参数 primary_key=True
  6.  
  7. 注:当model中如果没有自增列,则自动会创建一个列名为id的列
  8. from django.db import models
  9.  
  10. class UserInfo(models.Model):
  11. # 自动创建一个列名为id的且为自增的整数列
  12. username = models.CharField(max_length=32)
  13.  
  14. class Group(models.Model):
  15. # 自定义自增列
  16. nid = models.AutoField(primary_key=True)
  17. name = models.CharField(max_length=32)
  18.  
  19. SmallIntegerField(IntegerField):
  20. - 小整数 -32768 32767
  21.  
  22. PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
  23. - 正小整数 0 32767
  24. IntegerField(Field)
  25. - 整数列(有符号的) -2147483648 2147483647
  26.  
  27. PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
  28. - 正整数 0 2147483647
  29.  
  30. BigIntegerField(IntegerField):
  31. - 长整型(有符号的) -9223372036854775808 9223372036854775807
  32.  
  33. BooleanField(Field)
  34. - 布尔值类型
  35.  
  36. NullBooleanField(Field):
  37. - 可以为空的布尔值
  38.  
  39. CharField(Field)
  40. - 字符类型
  41. - 必须提供max_length参数, max_length表示字符长度
  42.  
  43. TextField(Field)
  44. - 文本类型
  45.  
  46. EmailField(CharField):
  47. - 字符串类型,Django Admin以及ModelForm中提供验证机制
  48.  
  49. IPAddressField(Field)
  50. - 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制
  51.  
  52. GenericIPAddressField(Field)
  53. - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4Ipv6
  54. - 参数:
  55. protocol,用于指定Ipv4Ipv6 'both',"ipv4","ipv6"
  56. unpack_ipv4 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启此功能,需要protocol="both"
  57.  
  58. URLField(CharField)
  59. - 字符串类型,Django Admin以及ModelForm中提供验证 URL
  60.  
  61. SlugField(CharField)
  62. - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
  63.  
  64. CommaSeparatedIntegerField(CharField)
  65. - 字符串类型,格式必须为逗号分割的数字
  66.  
  67. UUIDField(Field)
  68. - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
  69.  
  70. FilePathField(Field)
  71. - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
  72. - 参数:
  73. path, 文件夹路径
  74. match=None, 正则匹配
  75. recursive=False, 递归下面的文件夹
  76. allow_files=True, 允许文件
  77. allow_folders=False, 允许文件夹
  78.  
  79. FileField(Field)
  80. - 字符串,路径保存在数据库,文件上传到指定目录
  81. - 参数:
  82. upload_to = "" 上传文件的保存路径
  83. storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
  84.  
  85. ImageField(FileField)
  86. - 字符串,路径保存在数据库,文件上传到指定目录
  87. - 参数:
  88. upload_to = "" 上传文件的保存路径
  89. storage = None 存储组件,默认django.core.files.storage.FileSystemStorage
  90. width_field=None, 上传图片的高度保存的数据库字段名(字符串)
  91. height_field=None 上传图片的宽度保存的数据库字段名(字符串)
  92.  
  93. DateTimeField(DateField)
  94. - 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
  95.  
  96. DateField(DateTimeCheckMixin, Field)
  97. - 日期格式 YYYY-MM-DD
  98.  
  99. TimeField(DateTimeCheckMixin, Field)
  100. - 时间格式 HH:MM[:ss[.uuuuuu]]
  101.  
  102. DurationField(Field)
  103. - 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型
  104.  
  105. FloatField(Field)
  106. - 浮点型
  107.  
  108. DecimalField(Field)
  109. - 10进制小数
  110. - 参数:
  111. max_digits,小数总长度
  112. decimal_places,小数位长度
  113.  
  114. BinaryField(Field)
  115. - 二进制类型

5。自定义CharFiled

  代码如下

  1. class FixedCharField(models.Field):
  2. """
  3. 自定义的char类型的字段类
  4. """
  5. def __init__(self, max_length, *args, **kwargs):
  6. self.max_length = max_length
  7. super(FixedCharField, self).__init__(max_length=max_length, *args, **kwargs)
  8.  
  9. def db_type(self, connection):
  10. """
  11. 限定生成数据库表的字段类型为char,长度为max_length指定的值
  12. """
  13. return 'char(%s)' % self.max_length
    #在其他人中引用FixedCharField
  1. new_name = FixedCharField(max_length=64, default="张三")

6.字段参数

  null        用于表示某个字段可以为空。

  unique     如果设置为unique=True 则该字段在此表中必须是唯一的 。

  db_index    如果db_index=True 则代表着为此字段设置数据库索引。

  default     为该字段设置默认值。

  auto_now_add   配置auto_now_add=True,创建数据记录的时候会把当前时间添加到数据库。

  auto_now    配置上auto_now=True,每次更新数据记录的时候会更新该字段。

ORM杂记的更多相关文章

  1. 终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了

    前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...

  2. Enterprise Solution 3.1 企业应用开发框架 .NET ERP/CRM/MIS 开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    行业:基于数据库的制造行业管理软件,包含ERP.MRP.CRM.MIS.MES等企业管理软件 数据库平台:SQL Server 2005或以上 系统架构:C/S 开发技术 序号 领域 技术 1 数据库 ...

  3. UWP开发之ORM实践:如何使用Entity Framework Core做SQLite数据持久层?

    选择SQLite的理由 在做UWP开发的时候我们首选的本地数据库一般都是Sqlite,我以前也不知道为啥?后来仔细研究了一下也是有原因的: 1,微软做的UWP应用大部分也是用Sqlite.或者说是微软 ...

  4. 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】

    前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...

  5. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

  6. CYQ.Data V5 从入门到放弃ORM系列:教程 - Log、SysLogs两个日志类使用

    Log 静态类介绍: Public Static (Shared) Methods GetExceptionMessage 获取异常的内部信息 WriteLogToDB Overloaded. 将日志 ...

  7. CYQ.Data V5 从入门到放弃ORM系列:教程 - MAction类使用

    背景: 随着V5框架使用者的快速增加,终于促使我开始对整个框架编写完整的Demo. 上周大概花了一星期的时间,每天写到夜里3点半,终完成了框架所有功能的Demo. 同时,按V5框架名称空间的顺序,对每 ...

  8. ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

    前段时间在园子里看到了小蝶惊鸿 发布的有关绿色版的Linux.NET——“Jws.Mono”.由于我对.Net程序跑在Linux上非常感兴趣,自己也看了一些有关mono的资料,但是一直没有时间抽出时间 ...

  9. 最好的5个Android ORM框架

    在开发Android应用时,保存数据有这么几个方式, 一个是本地保存,一个是放在后台(提供API接口),还有一个是放在开放云服务上(如 SyncAdapter 会是一个不错的选择). 对于第一种方式, ...

随机推荐

  1. Linux基础知识第二讲,文件目录命令使用

    目录 一丶Linux终端使用技巧. 1.自动补全 Tab技巧. 2.使用输入过的命令 二丶Linux 目录知识 1.linux目录的特点 2.ls 隐藏文件的查看 3.ls 常用选项 4.通配符的配合 ...

  2. 【API知识】一种你可能没见过的Controller形式

    前言 这里分享一下我遇到的一个挺有意思的Controller形式,内容涉及@RequestMapping注解的原理. 实际案例 一.基本描述 项目甲中有多个模块,其中就有模块A和B.(这里的模块指的是 ...

  3. 【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程

    [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本 ...

  4. c# 虚函数 ,抽象类

    ---抽象类 class Program { static void Main(string[] args) { Rectangle r = , ); double a = r.area(); Con ...

  5. C#把动态创建的多个控件中指定控件显示在最上层

    在创建多个控件后,有些控件会发生重叠,那么就需要在鼠标按下它时能显示在最上层,下面通过先将按下操作的控件删除然后再重建,就达到让它显示在最上层了 //控件按下 private void picture ...

  6. Could not load file or assembly 'System.ValueTuple'

    项目目标框架:.Net Framework 4.6.2 报错:Could not load file or assembly 'System.ValueTuple' 在4.6.2项目中,想要使用C#7 ...

  7. (4)Maven快速入门_4在Spring+SpringMVC+MyBatis+Oracle+Maven框架整合运行在Tomcat8中

    利用Maven 创建Spring+SpringMVC+MyBatis+Oracle 项目 分了三个项目  Dao   (jar)   Service (jar)   Controller (web) ...

  8. Go开发之路 -- 流程控制

    1. if else if 条件 { } else { // else必须写在这里 } // 写一个程序, 从终端读取输入, 并转成整数. 如果转成整数出错, // 则输出'can not conve ...

  9. 01-css的引入方式

    [转]01-css的引入方式 引入css方式(重点掌握) 行内样式 内接样式 外接样式 3.1 链接式 3.1 导入式 css介绍 现在的互联网前端分三层: HTML:超文本标记语言.从语义的角度描述 ...

  10. PHP多条件分类列表筛选功能开发实例

    PHP多条件分类列表筛选功能开发实例,前后台一起实现 后台对接可以拼接sql语句,PHP通过表单值隐藏值筛选,常用又实用! 表单筛选核心函数 function Filter(a, b) { var $ ...