mysql连接查询优点_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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值