ORM:
- ORM什么是?
类名 ---> 数据库表
对象 ---> 记录
对象.属性 ---> 字段 - ORM的优缺点:
优点:
可跨平台,可以通过对象.属性取值,对象.方法,让该方法内部执行SQL语句。比如:save --> insert into table... 缺点:
1.执行效率低
2.程序员随着年龄的增长,会遗忘原生SQL语句。 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() 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)

mysql连接类与ORM的封装的更多相关文章

  1. 深入理解php的MySQL连接类

    php的MySQL连接类.  后面几个show_databases和show_tables....等方法都用了一堆echo,好像一直不喜欢在类的方法里直接用输出语句,不过这也只是列举数据库和表名,构造 ...

  2. php--->单例模式封装mysql操作类

    php 单例模式封装mysql操作类 单例模式的必要条件(三私一公) 私有的成员属性--防止类外引入这个存放对象的属性 私有的构造方法--为了防止在类外使用new关键字实例化对象 私有的克隆方法--为 ...

  3. mysql连接池的使用工具类代码示例

    mysql连接池代码工具示例(scala): import java.sql.{Connection,PreparedStatement,ResultSet} import org.apache.co ...

  4. orm映射 封装baseDao

    是用orm映射封装自己封装dao层 思路:通过映射获得实体类的属性拼接sql语句 import java.lang.reflect.Field; import java.lang.reflect.In ...

  5. MySql连接异常解决

    这两天遇到一个mysql连接的问题,找人弄了好几天也没弄好,先看一下报错信息: ============================================================ ...

  6. mysql连接的一些问题。

    最近网站出现 User 数据库名称 has already more than 'max_user_connections' active connections 的报错,网站瘫痪.有必要研究下这个问 ...

  7. python学习之 -mysql 连接和db_config配置

    最近学习python,记录下自己写学习python的代码和心得,自己写了一个使用python mysql 的查询语句和做的一个db_config.py 配置信息. 1.db_config.py 配置文 ...

  8. MySQL连接问题【如何解决MySQL连接超时关闭】

    --MySQL连接问题[如何解决MySQL连接超时关闭] ------------------------------------------------转载 最近做网站有一个站要用到WEB网页采集器 ...

  9. Asp.Net SignalR - 持久连接类

    持久连接类 通过SignalR持久连接类可以快速的构建一个即时通讯的应用,上篇博文已经我们创建一个owin Startup类和一个持久连接类来完成我们的工作,然后在Startup类的Configura ...

随机推荐

  1. sshpass密码

    使用sshpass sshpass -p "password" scp -r user@example.com:/some/remote/path /some/local/path ...

  2. 【Linux开发】linux设备驱动归纳总结(六):2.分享中断号

    linux设备驱动归纳总结(六):2.分享中断号 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  3. 配置Tomcat时退出就自动还原问题

    因为出现中文乱码问题需要配置server.xml文件,可是在每次配置完并且保存的情况下,重启服务器再看server.xml文件时,它自动还原到了未修改前的配置,后,解决如下: 第一步:打开eclips ...

  4. PTA(Advanced Level)1065.A+B and C

    Given three integers A, B and C in [−263,263], you are supposed to tell whether A+B>C. Input Spec ...

  5. Java小知识---Java请求一个URL。获取网站返回的数据

    对url发送请求,获得返回值: public static String SendGET(String url,String param){ String result="";// ...

  6. Spread.NET 表格控件 V12.1 正式发布

    Spread.NET 表格控件 V12.1 正式发布 加入动态数组,让公式运算更具效率 Spread.NET 是一个在功能和布局上与 Excel 高度类似的 .NET表格控件,目前已广泛应用于财务.预 ...

  7. celery 调用scrapy

    我的环境: celery 3.1.25 python 3.6.9 window10 celery tasks 代码如下,其中 QuotesSpider 是我的scrapy项目爬虫类名称 from ce ...

  8. ADG环境搭建

    一:实验环境介绍PC机系统: CentOS 6.5(64位)数据库版本: Oracle 11gR2 11.2.0.4 (64位)IP地址规划:主数据库10.110.9.41 SID:orapridb_ ...

  9. # 江西ccpc省赛-waves-(DP做法)

    江西ccpc省赛-waves-(DP做法) 题链:http://acm.hdu.edu.cn/showproblem.php?pid=6570 题意:给你长度为N,1≤N≤100000的一个数组,其中 ...

  10. 更换composer镜像源为阿里云

    ​ 说一说我为什么会更换镜像源,今天我准备给公司的项目添加一个 Excel 导出的功能,需要 PhpSpreadsheet 插件来实现我的功能.输入命令发现提示我 Authentication req ...