• ORM什么是?

    类名 ---> 数据库表

    对象 ---> 记录

    对象.属性 ---> 字段

      - ORM的优缺点:
    优点:
    可跨平台,可以通过对象.属性取值,对象.方法,让该方法内部执行SQL语句。比如:save --> insert into table... 缺点:
    1.执行效率低
    2.程序员随着年龄的增长,会遗忘原生SQL语句。

    2、MySQL连接类:

    import pymysql

    class MySQLClient():

    def init(self):

    # 1.连接数据库客户端

    self.client = pymysql.connect(

    host

    port

    user

    password

    database

    charset='utf8'

    autocommit=True

    )

              # 2.获取数据库游标
    self.cursor = self.client.cursor(
    pymysql.cursors.DictCursor
    ) # 查询方法
    def my_select(self, sql, value=None):
    # 1.提交sql语句
    self.cursor.execute(sql, value) # 2.获取数据库查询返回的结果
    res = self.cursor.fetchall() return res # 插入或更新方法sql提交
    def my_execute(self, sql, value): try:
    # 提交sql语句
    self.cursor.execute(sql, value) except Exception as e:
    print(e) def close(self):
    # 关闭游标
    self.cursor.close()
    # 关闭数据库连接
    self.client.close()

    3、ORM封装的查、增、改

    from mysql_py import MySQLClient


    @classmethod User.orm_select(name=tank)
    def orm_select(cls, **kwargs): # name=tank, age=18 ---> {name:tank, }
    mysql = MySQLClient()
    # 如果没有查询条件
    if not kwargs:
    # sql: select * from table_name;
    sql = 'select * from %s' % cls.table_name
    res = mysql.my_select(sql) # 如果有查询条件
    else:
    key = list(kwargs.keys())[0]
    value = kwargs.get(key)
    sql = 'select * from %s where %s=?' % (cls.table_name, key)
    sql = sql.replace('?', '%s')
    res = mysql.my_select(sql, value) # res ---> [{}, {}, {}] ------> [obj, obj. obj]
    # 将普通字典对象转为特殊字典对象---> 给普通字典对象添加了 对象.属性 取值/存值得方式。
    return [cls(**r) for r in res] # **{k:v, k2: v2} ---> k=v, k2=v2 增: insert into
    def orm_insert(self):
    mysql = MySQLClient()
    # sql: insert into table_name(f1, f2..) values(v1, v2..);
    key_list = []
    value_list = []
    args_list = [] for k, v in self.mappings.items():
    # k--》字段名
    # v--》字段对象
    if not v.primary_key:
    # 获取字段名
    key_list.append(v.name)
    # key_list.append(k) # 获取字段值
    value_list.append(
    # 通过反射获取字段的值: 反射可以通过字符串获取对象的属性值
    getattr(self, v.name, v.default) # 若v.name没有值,则使用默认值
    ) args_list.append('?') # 'insert into %s(%s) values(???)'
    sql = 'insert into %s(%s) values(%s)' % (
    self.table_name, ','.join(key_list),
    ','.join(args_list)
    ) sql = sql.replace('?', '%s')
    mysql.my_execute(sql, value_list) 改: update table_name set k=v, k2=v2 where id=pk_val;
    def orm_update(self):
    mysql = MySQLClient()
    key_list = []
    value_list = []
    primary_key = None for k, v in self.mappings.items():
    # 1.获取主键与主键对应的值
    if v.primary_key:
    primary_key = v.name + '=%s' % getattr(self, v.name) else:
    key_list.append(
    v.name + '=?'
    ) value_list.append(
    getattr(self, v.name)
    ) sql = 'update %s set %s where %s' % (
    self.table_name,
    ','.join(key_list),
    primary_key
    ) sql = sql.replace('?', '%s') mysql.my_execute(sql, value_list)

orm-1的更多相关文章

  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 会是一个不错的选择). 对于第一种方式, ...

  10. Asp.Net Mvc通用后台管理系统,bootstrap+easyui+权限管理+ORM

    产品清单: 1.整站源码,非编译版,方便进行业务的二次开发 2.通用模块与用户等基础数据的数据库脚本 3.bootstrap3.3.1 AceAdmin模板源码 4.easyui1.3.5源码 5.F ...

随机推荐

  1. 8、VUE自定义组件

    1.为什么要使用自定义组件? 自定义组件是用来封装复杂的内容,提高可重用性,比如封装复杂的表格组件.日历组件.图片轮播组件等. 2.自定义组件 2.1. 全局组件 全局组件是每个Vue对象都能使用的组 ...

  2. H5+asp.net 微信开发 遇到过的坑

    一.微信授权登录 1. 根据code 获取_access_tokens 2. 根据取到的openid和_access_tokens获取用户信息最神奇的是我用我自己的微信账号测试,一开始还可以取到tok ...

  3. ffmpeg命令参数详解

    ffmpeg命令参数详解 http://linux.51yip.com/search/ffmpeg ffmpeg图片加滤镜效果 参考:https://cloud.tencent.com/develop ...

  4. drf--权限组件

    目录 权限简介 局部使用 全局使用 源码分析 权限简介 权限就是某些功能只对特定的用户开放,比如django中创建用户可分为超级用户和普通用户,此时超级用户就有权限进入后台管理系统,而普通用户就没有权 ...

  5. Redux 和React 结合

    当Redux 和React 相接合,就是使用Redux进行状态管理,使用React 开发页面UI.相比传统的html, 使用React 开发页面,确实带来了很多好处,组件化,代码复用,但是和Redux ...

  6. PL/SQL 出现死锁解决办法

    转自:https://blog.csdn.net/u013015629/article/details/48005763 在PL/SQL中操作数据表时,长时间没反应,并且编辑某个表中数据时,出现“re ...

  7. android.view.ViewRoot$CalledFromWrongThreadException 异常的解决方案

    https://blog.csdn.net/vincent_czz/article/details/7070354 https://stackoverflow.com/questions/210141 ...

  8. Linux系统密码复杂度安全配置

    密码有效期控制 在文件/etc/login.defs中进行设置,如下参数 PASS_MAX_DAYS 180 #密码最长过期天数 PASS_MIN_DAYS 30 #密码最小过期天数 PASS_MIN ...

  9. Oracle使用expdp/impdp迁移数据

    Oracle使用expdp/impdp迁移数据 1.#以下步骤在开发库执行(expdp导出) 一.创建逻辑目录,该命令不会在操作系统创建真正的目录,最好以system等管理员创建. sqlplus / ...

  10. excel 大文件解析原理实现

    问题 目前的excel 不像之前的excel了可以支持的数据量更大,可以支持支持1048576行,16384列. 之前使用poi读取,直接报错,使用excel 事件的方式读取,还有不少的bug,关键是 ...