• 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. C#实现电信短信SMGP协议程序源码

    此程序为中国电信SMGP协议程序接口,适合在中国电信申请了短信发送端口的公司使用. 短信群发已经成为现在软件系统.网络营销等必不可少的应用工具.可应用在短信验证.信息群发.游戏虚拟商品购买.事件提醒. ...

  2. Git 多人协作 以及推送分支

    参考链接:https://www.liaoxuefeng.com/wiki/896043488029600/900375748016320 当你从远程仓库克隆时,实际上Git自动把本地的仓库的mast ...

  3. Linux中的defunct进程(僵尸进程)

    一.什么是defunct进程(僵尸进程)?在 Linux 系统中,一个进程结束了,但是他的父进程没有等待(调用wait / waitpid)他,那么他将变成一个僵尸进程.当用ps命令观察进程的执行状态 ...

  4. Vue搭建脚手架1

    Vue2.0搭建Vue脚手架(vue-cli) 此文章参考了网上一些前人的技术分享,自己拿过来总结一下.此文章是基于webpack构建的vue项目,并实现简单的单页面应用.其中利用到的相关技术会简单加 ...

  5. Java8新特性。

    常用函数接口: 函数式接口: 函数式接口在Java中是指:有且仅有一个抽象方法的接口(可以含其他方法). 而Java中的函数式编程的体现就是Lambda. @FunctionalInterface 注 ...

  6. Redis学习总结整理

    基本操作 设值 set KEY VALUE 获值 get KEY 设置过期时间(单位:s) set KEY VALUE ex SECONDS 设置过期时间(单位:s) exprire KEY SECO ...

  7. Linux Mysql创建新用户并允许远程连接

    第一步 登陆mysql: mysql-u 数据库用户名 -h 数据库IP -p 根据提示 输入数据库密码 第二步: GRANT ALL PRIVILEGES ON *.* TO '自定义用户名'@'% ...

  8. Odoo graph视图

    转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826175.html 一:图形视图 图形视图用来表示对模型的概述和分析,根元素是<graph> ...

  9. JVM垃圾收集算法之标记算法

    前言 总所周知,jvm的垃圾收集算法一般包括标记.清除.整理三个阶段,最近在看了有关于垃圾收集的标记算法,记录一下自己的理解. 垃圾收集中标记算法有两种:一种是引用计数法,一种是根搜索算法. 引用记数 ...

  10. KVM虚拟机被OOM killer

    一.线上环境的虚拟机被KVM物理机kill掉 Linux 内核根据应用程序的要求分配内存,通常来说应用程序分配了内存但是并没有实际全部使用,为了提高性能,这部分没用的内存可以留作它用,这部分内存是属于 ...