docker版jxTMS使用指南:python服务之访问数据库

本文讲解4.0版jxTMS中python服务访问数据库,docker版jxTMS使用指南:4.0版升级内容

docker版本的使用,请参考:docker版jxTMS使用指南

上篇文章讲解了如何用jxMysq的ORM定义并利用其类函数、对象函数访问数据库,本文讲解如何自己执行数据库访问。

当前,前提是自己对数据库、SQL比较熟悉。不过呢,jxTMS是docker镜像方式提供的,也就是说,真搞坏了,那删掉容器再重新启动一个新的就好了。

引用:

from jx.jxMysql import mysqlDB

mysqlDB是jxTMS提供的数据库连接修饰符,用该修饰符修饰的函数,将自动获得一个数据库连接,该函数就可使用此数据库连接来访问数据库;函数执行完毕,jxTMS会自动为该数据库连接做一次提交,即一个用mysqlDB修饰的函数中所有的数据库操作是一个数据库事务。

上一章节中的ORM中所有对数据库的增改查操作,也都是通过mysqlDB修饰的。

我们以ORM的类函数getByID函数为例来看一下mysqlDB是如何使用的:

@classmethod
@mysqlDB
def getByID(cls,db,clsName,id):
    sql = f'SELECT * FROM {clsName} WHERE ID={id} limit 1'
    db.cursor.execute(sql)
    return db.cursor.fetchone()

大家请看一下上篇文章中所讲的getByID的签名:

getByID(cls,dbName,clsName,id)

大家会发现:getByID在定义的时候,cls后的第一个参数是db,而调用时cls后的第一个参数是dbName。

这就是mysqlDB所起的作用:mysqlDB会帮助被修饰的函数建立并管理数据库连接。

以getByID为例,@mysqlDB给getByID函数添加了一个wrapper壳函数,在用户调用getByID时,这个wrapper壳函数会先得到执行:

1、其用送入的dbName来查找数据连接池获取一个到该数据库的连接

2、把这个数据库连接放入getByID参数表的第一个参数,将其它参数一并放入参数表,然后调用getByID函数

3、如果getByID函数正确执行完毕,提交该数据库连接

4、将getByID函数的返回值和True组成一个元组,返回给调用者

5、如果getByID函数执行错误,则回滚,并将错误记入日志,然后返回(None,False)

我们再举一个例子:上篇文章的getBy函数返回的是数据库中的数据,我们现在希望直接得到一个ORM对象,这样以后update、reset会非常方便。

class Demo(ORM):
    _ormAttr = {
        'Name':'string',
        ...
    }
    def __init__(self,data=None):
        super(Demo , self).__init__(dbName,'Demo',data=data)

    @classmethod
    @mysqlDB
    def _getByName(cls,db,name):
        sql = f'SELECT * FROM Demo WHERE Name={name} limit 1'
        db.cursor.execute(sql)
        return db.cursor.fetchone()

    @classmethod
    def getByName(cls,name):
        rs,rc = cls._getByName(dbName,name)
        if rc and not rs is None:
	        #上篇文章说过:查询得到的数据可以通过data()函数取得
	        return Demo(data=rs)
		 return None

调用Demo.getByName(name)就可以直接得到一个Demo的数据对象,然后调用set、update等函数来使用了,并可以用data()来获取查询到的数据。

参考资料:

jxTMS设计思想

jxTMS编程手册

下面的系列文章讲述了如何用jxTMS开发一个实用的业务功能:

如何用jxTMS开发一个功能

下面的系列文章讲述了jxTMS的一些基本开发能力:

jxTMS的HelloWorld

你可能感兴趣的:(jxTMS,docker,python,jxTMS,SaaS)