zoukankan      html  css  js  c++  java
  • 1105 ROM优缺点,MySQL连接类,查插更方法

    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)
    
  • 相关阅读:
    YUI的treeview组件——带checkbox类型的treeview如何实现disabled功能
    [转载 js] 15个基于Web的HTML编辑器
    YUI3学习笔记 ( 8 )
    js中用于继承的函数extend——摘自《javascript设计模式》
    YUI的treeview组件——带checkbox类型的treeview如何实现disabled功能
    YUI3学习笔记 ( 8 )
    Delphi 2007 代码补全、语句提示的快捷键是什么?
    Fastreport使用经验(转)在Delphi程序中访问报表对象
    cxGrid使用记录
    Delphi编程地一些小程序
  • 原文地址:https://www.cnblogs.com/793564949liu/p/11801683.html
Copyright © 2011-2022 走看看