对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的方案是采用硬编码方式,为每一种可能的数据库访问操作提供单独的方法。

class Field(object):def __init__(self, name, colum_type):self.name = nameself.colum_type = colum_typedef __str__(self):return "<%s:%s>" % (self.__class__.__name__, self.name)class IntegerField(Field):def __init__(self, name):super(IntegerField, self).__init__(name, "bigint")class StringField(Field):def __init__(self, name):super(StringField, self).__init__(name, "varchar(100)")class ModelMetaclass(type):def __new__(cls, name, bases, attrs):if name=='Model':return type.__new__(cls, name, bases, attrs)#将attrs中为数据库类型的变量转移到__mapping__中mappings = dict()for k, v in attrs.iteritems():if isinstance(v, Field):#如果是Field类print('Found mapping: %s==>%s' % (k, v))mappings[k] = v#映射到mapping里for k in mappings.iterkeys():attrs.pop(k)attrs['__table__'] = name # 假设表名和类名一致attrs['__mappings__'] = mappings # 保存属性和列的映射关系return type.__new__(cls, name, bases, attrs)class Model(dict):__metaclass__ = ModelMetaclassdef __init__(self, **kw):super(Model, self).__init__(**kw)def __getattr__(self, key):try:return self[key]except KeyError:raise AttributeError(r"'Model' object has no attribute '%s'" % key)def __setattr__(self, key, value):self[key] = valuedef save(self):fields = []params = []args = []for k, v in self.__mappings__.iteritems():fields.append(v.name)params.append('?')args.append(getattr(self, k, None))sql = 'insert into %s (%s) values (%s)' % (self.__table__, ','.join(fields), ','.join(params))print('SQL: %s' % sql)print('ARGS: %s' % str(args))class User(Model):# 定义类的属性到列的映射:id = IntegerField('id')name = StringField('username')email = StringField('email')password = StringField('password')# 创建一个实例:
u = User(id='12345', name='Michael', email='test@orm.org', password='my-pwd')
# # 保存到数据库:
u.save()

转载于:https://www.cnblogs.com/Msh0923/p/8111623.html

Python之ORM相关推荐

  1. 利用python实现ORM

    转载自:利用python实现ORM 做web开发的基本绕不过ORM,很多时候ORM可以大大减少开发工作量,那么ORM是怎样实现的呢?其实很简单,说穿了一文不值,本文先实现一个简单的ORM然后分析下现在 ...

  2. python之ORM操作

    1. SQLalchemy简介 SQLAlchemy是一个开源的SQL工具包,基本Python编程语言的MIT许可证而发布的对象关系映射器.SQLAlchemy提供了"一个熟知的企业级全套持 ...

  3. Python实现ORM

    ORM即把数据库中的一个数据表给映射到代码里的一个类上,表的字段对应着类的属性.将增删改查等基本操作封装为类对应的方法,从而写出更干净和更富有层次性的代码. 以查询数据为例,原始的写法要Python代 ...

  4. Python sqlalchemy orm 多对多外键关联

    多对多外键关联 注:使用三张表进行对应关联 实现代码: # 创建3个表 配置外键关联 # 调用Column创建字段 加类型 from sqlalchemy import Table, Column, ...

  5. orm设置bool型 python_详解python的ORM中Pony用法

    Pony是Python的一种ORM,它允许使用生成器表达式来构造查询,通过将生成器表达式的抽象语法树解析成SQL语句.它也有在线ER图编辑器可以帮助你创建Model. 示例分析 Pony语句: sel ...

  6. Python轻量级ORM框架——peewee

    这里写目录标题 Python中常用的ORM框架 peewee使用经验 从数据库中导出模型 查询 统计类查询 优化子查询 参考文章 Python中常用的ORM框架 SQLALchemy:重量级框架,适合 ...

  7. mysql 增删修模型_48.Python中ORM模型实现mysql数据库基本的增删改查操作

    首先需要配置settings.py文件中的DATABASES与数据库的连接信息, DATABASES = { 'default': { 'ENGINE': 'django.db.backends.my ...

  8. SQL基础知识回顾--(Go/Python/Beego ORM/Django ORM/原生Sql)

    序言 Filecoin即将上线.我们知道filecoin是由goLang编写的,所以在此间歇期,我打算同时复习一下go和python的知识,本文的侧重点在于如何高效率的使用orm-sql语句. Go操 ...

  9. Python编写ORM框架

    ORM全称"Object Relational Mapping",即对象-关系映射,就是把关系数据库的一行映射为一个对象,也就是一个类对应一个表,这样,写代码更简单,不用直接操作S ...

  10. Python 使用ORM框架

    前沿 对象关系映射ORM是在实际应用编程中常用到的技术,它在对象和关系之间建立了一条桥梁,前台的对象型数据和数据库中的关系型的数据通过这个桥梁来相互转化.简单来说就是开发人员在使用ORM模型编程时,不 ...

最新文章

  1. 机器人动力学建模实例:二连杆机械臂
  2. 自由自在公司进口食品呈现高端消费的趋势
  3. Flask学习 黑马程序员-6节课入门Flask框架web开发视频(中途撤退,寻找py3教程)
  4. Modernizr.js-检测浏览器对HTML5和CSS3的支持程度
  5. 如何把视频压缩变小?视频压缩方法介绍
  6. c# 2.0 Factory的实现
  7. Net处理html页面元素工具类(HtmlAgilityPack.dll)的使用
  8. kpi绩效考核流程图_公开!松松团队KPI绩效考核表分享
  9. 六、JAVA基础--泛型
  10. mysql主从搭建配置(mysql version5.7.22)
  11. SpringBoot 数据篇之使用JDBC
  12. HTML表格修改字段,HTML表格 – 更改列中单个单元格的宽度
  13. shell命令 安装软件包
  14. 计算机网络课程设计——校园网的规划与设计
  15. 单片机:楼梯照明灯控制
  16. linux: dirent.h 使用
  17. 向量积的二维物理意义,二维向量叉乘几何意义
  18. Blender MMD 备忘
  19. C语言 数组 冒泡排序法
  20. 复杂UI卡顿问题没想到还能这么优化?

热门文章

  1. Android学习笔记之android:collapseColumns,android:shrinkColumns和stretchColumn
  2. 命令行实现SMTP和IMAP
  3. android系统内置HttpClient库(WebView+ Http(s)URLConnection(ok-http)+ HttpClient(apache-http))
  4. Android GraphicBuffer
  5. JFreeChart 使用介绍
  6. 微信小程序云开发不完全指北
  7. 注册中心—组件—Consul
  8. 注册中心—组件—ZooKeeper
  9. mysql索引实现原理
  10. Java集合—Deque Stack