• 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. Asp.Net 技术

    Asp.Net 技术Nuget 管理器Spring.NET 框架Spring.core 包 微服务Consul .NetCore 框架:Spring.net Nhibernate 框架Dapper.n ...

  2. 2019 阿里java面试笔试总结 (含面试题解析)

       本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.滴滴等公司offer,岗位是Java后端开发,因为发展原因最终选择去了阿里,入职一年时间了,也成为了面试官, ...

  3. pandas-19 DataFrame读取写入文件的方法

    pandas-19 DataFrame读取写入文件的方法 DataFrame有非常丰富的IO方法,比如DataFrame读写csv文件excel文件等等,操作很简单.下面在代码中标记出来一些常用的读写 ...

  4. ECMA6新增语法(待续...)

    块级作用域:  ES6允许你使用块级作用域,不过目前大多数的ES6语法只允许在严格模式下使用("use strict” ). 1 let关键字 作用:声明变量,一个花括号就是一个作用域(每个 ...

  5. linux mysql连接

    1. 添加头文件 # apt-get install libmysqlclient-dev 引入头文件 #include <mysql/mysql.h> 2. 举例 MYSQL *mysq ...

  6. 设计模式之JDK动态代理源码分析

    这里查看JDK1.8.0_65的源码,通过debug学习JDK动态代理的实现原理 大概流程 1.为接口创建代理类的字节码文件 2.使用ClassLoader将字节码文件加载到JVM 3.创建代理类实例 ...

  7. 记录一次Oracle创建DBLink踩到小坑

    1.查询当前是否具有创建DBlink的权限: select * from user_sys_privs where privilege like upper('%DATABASE LINK%'); 如 ...

  8. Linux 系统管理 : last 命令详解

    原文 last命令用于显示用户最近登录信息.单独执行last命令,它会读取/var/log/wtmp的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来 语法 last(选项)(参数) 选项 ...

  9. Dockerfile(从无到有创建镜像)

    本文原始地址:https://sitoi.cn/posts/43818.html 结构 DockerFile分为四部分组成: 基础镜像信息 维护者信息 镜像操作指令 容器启动时执行指令 基础镜像信息 ...

  10. 线性排序总结(c++实现)

    前面介绍了一些常用的比较排序算法,它们都是通过比较两个元素的大小进行排序,归并排序和堆排序在最坏情况下的复杂度为O(nlgn),可以证明(使用决策树模型),通过比较进行排序,算法的下界为O(nlgn) ...