我的第一个python web开发框架(25)——定制ORM(一)

  在开始编写ORM模块之前,我们需要先对db_helper进行重构,因为ORM最终生成的sql是需要转给db_helper来执行的,所以拥有一个功能完善、健壮的数据库操作类是非常必要的。

  这是项目原db_helper.py代码

 View Code

  通过对代码的简单分析,可以看到整个模块在初化时,载入数据库链接配置,对数据库的操作也只有简单读与写操作。这样的功能对于一般的数据库增删改查操作已经足够了,但如果业务复杂,有多个库、需要用到事务或者需要访问不同类型数据库时,它就不够用了。所以首先要做的就是对它进行重构,功能进行完善。

  首先我们需要将配置独立出来,当有需要链接多个数据库时,可以读取不同的配置文件,让程序更加方便灵活。

  在config目录下创建db_config.py文件(有多个库时,可以配置多个不同的参数来引用)

复制代码
#!/usr/bin/env python # coding=utf-8### 数据库链接参数 ###DB = {     'db_host': '127.0.0.1',     'db_port': 5432,     'db_name': 'simple_db',     'db_user': 'postgres',     'db_pass': '123456' } # 是否将所有要执行的Sql语句输出到日志里IS_OUTPUT_SQL = False
复制代码

  在配置中,我们同样定义了数据库连接地址、端口、数据库名称、用户名与密码。

  另外,为了方便我们进行排错,检查sql的生成情况,添加了IS_OUTPUT_SQL是否输出执行的sql语句到日志中这一个开关项,设置为True时,所有被执行的sql语句都会被写到日志中,方便下载日志下来进行分析。

 

  对于数据库操作模块,我们需要封装成一个类,在有需要调用时,就可以通过with语句进行初始化操作,设置对应的数据库链接配置,灵活的连接不同的数据库。

  在设计操作类时,我们需要思考几个问题:

  1.它可以支持多数据库操作,即读取不同的配置能连接操作不同的数据库(可以通过类初始化时进行注入配置信息)

  2.它需要支持with语句,当我们忘记关闭数据库游标和连接时,自动帮我们关闭(需要实现__enter__()与__exit__()方法)

  3.它需要支持数据库事务,当执行失败时,可以回滚数据,当所有sql执行都成功时,可以统一提交事务(需要创建rollback()与commit()方法)

  4.它需要支持查询、添加、修改、删除等操作,方便我们操作关系型数据库记录(需要创建sql执行方法)

  5.它需要支持sql执行优化,将超出指定执行时间的sql语句记录到日志中,方便开发人员进行分析(需要记录sql执行起始时间与结束时间,并进行计算,当这个时间大于指定值时执行日志写入程序)

  根据这些要求,我们初步设计出数据库操作类的基本模型

复制代码
class PgHelper(object):     """postgresql数据库操作类"""      def __init__(self, db, is_output_sql):         """初始化数据库操作类配置信息"""      def open_conn(self):         """连接数据库,并建立游标"""      def close_conn(self):         """关闭postgresql数据库链接&
                    
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信