ROM

对象关系映射,映射到数据库中的数据表

优点:

使用者不要关心SQL命令具体怎么编写

直接调用方法,来执行对应的SQL命令

缺点:

高级封装导致效率变低

会忘记SQL语句

MySQL连接类

class MySQLClient:

#创建连接并获取游标

def __init__(self):

self.client = pymysql.connect(

host = '127.0.0.1',

port = 3306,

user = 'root',

password = '123',

database = 'orm_demo',

charset = 'utf8',

autocommit = True

)

self.cursor = self.client.cursor(

pymysql.cursors.DictCursor

)

#提交查询SQL命令

def my_select(self,sql,value=None):

#提交查询的SQL命令

self.cursor.execute(sql,value)

#获取查询之后的结果

res = self.cursor.fetchall()

return res

#封装SQL的插入和更新操作

def my_execute(self,sql,values):

try:

self.cursor.execute(sql,values)

except Exception as e:

print(e)

#关闭数据库

def close(self):

self.cursor.close()

self.client.close()

orm_select

查询方法

#绑定给类的方法

@classmethod

def orm_select(cls,**kwargs):

#调用MySQLClient拿到mysql对象

mysql = MySQLClient()

if not kwargs:

#查询所有 SQL语句:select * from 表名;

sql = "select * from %s" % cls.table_name

res = mysql.my_select(sql)

else:

#返回的是一个对象,需要转成list类型

key = list(kwargs.keys())[0]

values = kwargs.get(key)

#条件查询 SQL语句:select * from 表名 where id=1;

sql = 'select * from %s where %s=?' % (cls.table_name,key)

sql = sql.replace('?','%s')

#需要拿到MySQL的游标,提交SQL语句

res = mysql.my_select(sql,value)

return [cls(**d) for d in res]

orm_insert

插入方法

def orm_insert(self):

mysql = MySQLClient()

#存储字段名

keys = []

#存字段对应的值

values = []

#存放?的,有几个字段,就有几个?

args = []

for k,v in self.mappings.items():

#过滤掉主键,以为主键是自增的

if not v.primary_key:

#存储,除了主键以外的字段名

keys.append(v.name)

#存储,除了主键以外的字段值

values.append(

getattr(self,v.name,v.default)

)

#存储?,有几个字段,就有几个?

args.append('?')

#SQL语句:insert into table_name(v1,v2) values (?,?);

sql = 'insert into %s(%s) values(%s)'%(self.table_name,

",".join(keys),

",".join(args)

)

#SQL语句:insert into table_name(v1,v2) values (%s,%s);

sql = sql.replace('?',"%s")

mysql.my_execute(sql,values)

orm_update

更新方法

def orm_update(self):

mysql = MySQLClient()

#字段名

keys = []

#字段值

values = []

#主键

primary_key = None

for k,v in self.mappings.item():

if v.primary_key:

primary_key = v.name + '%s' % getattr(self,v.name)

else:

keys.append(v.name + '?')

values.append(

getattr(self,v.name)

)

#注意:更新条件约定俗成使用主键

sql = 'update %s set %s where %s' % (

self.table_name,

','.join(keys),

primary_key

)

#SQL语句:update table set k1=%s,k2=%s where id=pk;

sql = sql.replace('?','%s')

mysql.my_execute(sql,values)

mysql连接查询优点_1105 ROM优缺点,MySQL连接类,查插更方法相关推荐

  1. 二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)

    MySQL连接查询(多表连接查询:内连接,外连接,交叉连接详解) 6:多表连接查询 笛卡尔乘积:如果连接条件省略或无效则会出现 解决办法:添加上连接条件 连接查询的分类: 1.按年代分类:1)sql ...

  2. oracle表连接查询逗号隔开_Oracle多表连接查询

    连接:将一张表中的行按照某种条件和另一张表中的行连接起来形成一个新行的的过程. 根据连接查询返回的结果,分为3类: 内连接(inner join) 外连接(outer join) 交叉连接(cross ...

  3. 内连接查询分为:交叉连接、相等连接、自然连接

    一,内连接查询分为:交叉连接.相等连接.自然连接. 1.交叉连接又称为"笛卡尔连接"或"叉乘",它是所有类型的内连接的基础 语法:SELECT *FROM 表名 ...

  4. mysql与java连接查询_【java】MySQL数据库之连接查询

    连接查询 首先来认识一个叫笛卡尔积 (cartesian product) 的东东,也可以叫直积. 假设我们有一个集合 A = {a, b}, 还有一个集合B = {0, 1, 2} ,那么这两个两集 ...

  5. mysql 连接查询分组_详解MySQL中的分组查询与连接查询语句

    分组查询 group bygroup by 属性名 [having 条件表达式][ with rollup] "属性名 "指按照该字段值进行分组:"having 条件表达 ...

  6. mysql 分组查询 语句_详解MySQL中的分组查询与连接查询语句

    分组查询 group bygroup by 属性名 [having 条件表达式][ with rollup] "属性名 "指按照该字段值进行分组:"having 条件表达 ...

  7. MYSQL连接查询(3)多表连接

    一.多表连接查询方法 1.如果查询的信息来源于多张表,则可通过两两相连的方式建立多表连接查询. 2.三表连接查询的语法: SELECT fieldlist FROM table1 JOIN table ...

  8. mysql 三个表内连接查询_MySQL5.5多表之连接查询

    连接查询 关系型数据库管理系统中,通常将每个实体的所有信息存放在一张表中,当查询数据时,通过连接操作查询多个表中的实体信息,当两个或多个表中存在相同意义的字段时,便可以通过这些字段对不同的表进行连接查 ...

  9. mysql数据类型查询命令_Linux命令:MySQL系列之三--mysql数据类型及SQL结构化查询语句使用...

    MySQL 存储引擎,也被称为表类型: MyISAM表:无事务处理功能,支持表锁 .frm:表结构定义文件 .MYD:表数据文件 .MYI:表索引文件 InnoDB表:支持事务处理功能,支持行锁 .f ...

最新文章

  1. 开源Android或将收费
  2. 《分布式系统:概念与设计》一3.5.2 IEEE 802.11无线LAN
  3. java查看虚拟机信息_java分析工具系列4:jinfo(实时的调整和查看虚拟机信息)...
  4. 【转】java string类的方法及说明
  5. CF-778 C.Peterson Polyglot (Trie合并)
  6. tomcat 访问去掉项目名 直接访问 localhsot
  7. winform响应时间最长是多少分钟_史上最短职业赛是多少时间?《王者荣耀》中国队只花了三分钟...
  8. 开源开放 | 移动应用知识图谱MAKG(CCKS2021)
  9. leveldb - log格式
  10. 另类多线程生产者与消费者模式
  11. 关于文件服务器共享文件的备份与恢复
  12. uml点餐系统活动图_UML 活动图
  13. matlab实现大律法,Otsu算法(大律法或最大类间方差法)
  14. 街机游戏模拟器 mame for linux
  15. 基于EasyNVR摄像机流媒体服务器实现RTSP或Onvif监控摄像头Web无插件化直播监控
  16. 线性代数常见的几种行列式
  17. Freedom and discipline
  18. 计算机实战项目、毕业设计、课程设计之 含论文+辩论PPT+源码等]微信小程序ssm竞赛管理平台小程序+后台管理系统
  19. COBOL学习之COMMIT--ROLLBACK
  20. 【JAVA】为什么抽象类不能被实例化

热门文章

  1. 吴恩达机器学习logistic回归作业(python实现)
  2. Redis基础(五)——删除策略和内存淘汰机制
  3. 第一:MySQL安装和配置(超详细)
  4. python接口测试_python接口自动化测试框架
  5. 升级linux 4.9内核,Linux 内核 4.8 将不再更新 建议迁往 4.9 稳定版
  6. 如何去除Druid数据监控广告?
  7. Guns启动项目抛出:脚本错误,flyway执行迁移异常
  8. Mysql权限控制 - 允许用户远程连接
  9. [Ext JS6] Grid 某些行不允许删除和选择的实现
  10. 元胞自动机交通流模型c++_MATLAB——含出入匝道的交织区快速路元胞自动机模型...