• 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 Core Web API中使用Mini Profiler

    原文如何在ASP.NET Core Web API中使用Mini Profiler 由Anuraj发表于2019年11月25日星期一阅读时间:1分钟 ASPNETCoreMiniProfiler 这篇 ...

  2. C# 汉字获取拼音首字母,给数据库中的姓名添加首字母

    本方案采用微软官方语言包 (下载链接: https://pan.baidu.com/s/10I1bhTdFr4-q_xKVHuEzMA 提取码: p3nk ChnCharInfo.dll 用于获取首字 ...

  3. JavaScript入门(一)

    JavaScript入门篇—开篇 Document对象 1Document对象表示当前页面,HTML在浏览器中是以DOM形式表示为树形结构.Document是DOM树的根节点.(因此需要查找DOM树中 ...

  4. mybatis关联映射一对一

    在项目开发中,会存在一对一的关系,比如一个人只有一个身份证,一个身份证只能给一个人使用,这就是一对一关系.一对一关系使用主外键关联. table.sql,在数据库中创建如下两个表并插入数据 CREAT ...

  5. 基于elementUI创建的vue项目

    这周对公司的内容使用vue进行重构,所以记录一下开始项目的过程 下载elementUI: 项目文件夹中在命令行中输入:npm install elementui -s 下载完成后在 main.js 中 ...

  6. Qt--多线程间的互斥

    一.多线程间的互斥 临界资源--每次只允许一个线程进行访问的资源 线程间的互斥--多个线程在同一个时刻需要访问临界资源 QMute类是一把线程锁,保证线程间的互斥--利用线程锁能够保证临界资源的安全性 ...

  7. Nginx作为代理服务

    代理服务简介 什么是代理服务 代理-代理办理(代理理财.代理收货.代理购物等等). HTTP请求没有代理服务的模型图 HTTP请求具有代理服务的模型图 代理分类 正向代理 反向代理 正向代理 当局域网 ...

  8. Python内置函数复习

    filter sorted heapq counter namedtuple  reduce deque pickle islice re.split endswith stat os #filter ...

  9. php迭代器模式(iterator pattern)

    ... <?php /* The iterator pattern is used to traverse a container and access its elements. In oth ...

  10. js--获取和设置css属性

    在这一章我们讲述一下如何通过js来操作css中的属性 1,首先,我们想获取元素的一些属性.例如innerHTML,value等值时,我们可以 var object=document.getELemen ...