Section Menu:  

KGCMS数据库操作对象:kyger.db.MySQL

  • 发布时间: 2019-08-28 00:00
  •    阅读: 6066   

调用

    1.在项目的web目录下的py文件通过定义接口KgcmsApi类,就可以直接调用self.db来操作数据库。
1
2
3
4
5
6
7
8
9
10
class KgcmsApi(object):
    """产品模块类"""
 
    def __init__(self):
        """初始化数据"""
        pass
     
    def __call__(self):
        """接口文件"""
        return self.db.__doc__
    2.在项目的kyger目录中的模块如果需要操作数据库,需要在web目录下的py文件中将self.db做为参数传递:
1
2
3
4
5
6
7
8
9
10
11
# 文件目录:web/article.py。 创建实例article时将self.db当做参数传递。
class KgcmsApi(object):
    """KGCMS框架接口"""
 
    def __init__(self):
        pass
 
    def __call__(self):
        from kyger.article import Article
        article = Article(self.db)
        return 0
1
2
3
4
5
6
7
8
# 文件目录:kyger/article.py
class Article(object):
    """文章调用"""
    # 构造函数
    def __init__(self, db=None):
        # 如果创建实例时将db传递过来则直接赋值给self.db使用,如果没有则需要创建
        from kyger.db import MySQL
        self.db = db if db else MySQL()  # 防止因为没有传递self.db导致操作数据库出错

方法1:add()

    ● 描述
         往指定的表里插入数据,SQL语句:INSERT INTO  `kgcms`.`kg_admin` (`id` ,`username`) VALUES (NULL , 'kyger'),。
    ● 语法
1
add(table, data, log=True)
    ● 参数
         table [str]:表名,不包含前缀。
         data [str]:要插入的数据字典,对应的字段名及值: {'id':'NULL','username':'kyger'}。
         log [bool]:是否记录操作日志, 一般情况下建议开启。
    ● 返回值
         返回一个字符串或0。
    ● 实例
1
2
3
4
5
6
data = {
   'username''admin',
   'password''123456',
   'encryption'0,
}
return self.db.add('admin', data)  # 往admin表中添加数据
    ● 结果
1
'23'  # 返回插入数据的id

方法2:dele()

    ● 描述
         删除数据操作,SQL语句:DELETE FROM `kg_admin` WHERE `kg_admin`. `id` = 20;。
    ● 语法
1
dele(table, where, limit=0, log=True)
    ● 参数
         table [str]:表名,不包含前缀。
         where [int|str]:条件, 如果int类型将视为id;其它视为条件语句: 20|`username` = 'kyger' && ...
                         不支持删除全部,但可使用条件 1=1 达到删除部分数据。
         limit [int]:删除的记录条数。
         log [bool]:是否记录操作日志, 建议开启。
    ● 返回值
         返回一个int类型数据。
    ● 实例
1
return self.db.dele('article'14)
1
return self.db.dele('article''`id` >13')
    ● 结果
1
1  # 返回删除的数据条数

方法3:edit()

    ● 描述
         修改/更新数据,SQL语句:UPDATE `kg_admin` SET `password` = '999' WHERE `kg_admin`.`id` = 2;。
    ● 语法
1
edit(table, data, where=None, limit=0, log=True)
    ● 参数
         table [str]:表名,不包含前缀。
         data [dict]:要修改的字段名及值:{'username':'kyger', 'password': '123456'}。
         where [int|str]:条件,如果是一个数字将视为id;为0时忽略条件,将更新所有记录; 其它视为条件语句::20|`username` = 'kyger' && ...。
         limit [int]:影响的记录数,0时不限制。
         log [bool]:是否记录操作日志, 建议开启。
    ● 返回值
         返回一个int类型数据。
    ● 实例
1
return self.db.edit('admin', {'username':'kyger''password''123456'}, 51)
    ● 结果
1
1  # 返回影响的数据条数

方法4:field_list()

    ● 描述
         获取数据表里所有的字段名属性。
    ● 语法
1
field_list(table, log=True)
    ● 参数
         table [str]:表名,不包含前缀。
         log [bool]:是否记录操作日志, 建议开启。
    ● 返回值
         返回一个列表。
    ● 实例
1
return self.db.field_list('test')
    ● 结果
1
2
# 获取数据表里所有的字段名和属性
[{'Field''id''Type''int(11) unsigned''Null''NO''Key': '', 'Default': None, 'Extra': ''}, {'Field': 'test', 'Type': 'int(11) unsigned zerofill', 'Null': 'NO', 'Key': '', 'Default': None, 'Extra': ''}]

方法5:lastrowid()

    ● 描述
         获取上一步 INSERT 操作产生的ID。
    ● 语法
1
lastrowid()
    ● 参数
         无参数。
    ● 实例
1
return self.db.lastrowid()
    ● 结果
1
5  # 上一次插入数据的id

方法6:list()

    ● 描述
         查询数据,查询中所有的表名前缀使用{pr}代替。
    ● 语法
1
list(table, field='*', where=0, order=0, page=0, limit=30, shift=0, log=False)
    ● 参数
         table [str]:表名,form语句,或多表关联,前缀使用 {pr} 代替,单个表名时不需要加前缀。
         field [str]:查询的字段,默认为 *。
         where [str]:条件语句, 如果是一个 int 值,则自动转化为:WHERE `id` = "%s"'。
         order [str]:排序:`id` ASC, `name` DESC。
         page [int]:当前页码,是否分页,0不分页;其它数字为页码;分页时可以通过 total 获取总记录数。
         limit [int|str]:分页时只填写一个数字,每页要显示的记录数: '0, 30'|10。
         shitf [int]:是否将二维列表成一维,1转成一维、0不转换,查询单条记录时非常有用。
         log [bool]:是否记录操作日志, 查询敏感数据时建议开启。
    ● 返回值
         返回一个列表。
    ● 实例
1
2
3
4
5
6
7
8
9
return self.db.list(
    table='`{pr}admin` as a',
    field='a.`id`, a.`username`',
    where='`id`>4 && `id`<100',
    order='`id` ASC, `username` DESC',
    page=2,
    limit=3,
    log=True,
)
    ● 结果
1
[{'id'90'username''admin'}, {'id'92'username''kgcms888'}, {'id'93'username''kgcms2'}]

方法7:log()

    ● 描述
         获取数据库操作日志记录。
    ● 语法
1
log(type=1, info={'state''SUCCESS'})
    ● 参数
         type [int]:日志类型(1查询敏感数据/2添加数据/3修改数据/4删除数据/5其它数据库操作/6后台管理员登录/7上传文件)。
         info [dict]:MySQL json。state: [SUCCESS|FAILURE] 结果。
    ● 返回值
         无返回值。
    ● 实例
1
return self.db.log(type=5, info={'state''SUCCESS'})
    ● 结果
1
# 暂无结果

方法8:processlist()

    ● 描述
         查询当前对应的 MySQL 帐户运行的线程,查看MySQL连接列表。
    ● 语法
1
processlist()
    ● 参数
         无参数
    ● 返回值
         返回一个列表。
    ● 实例
1
return self.db.processlist()
    ● 结果
1
[{'Id'72535'User''kgcms''Host''163.179.46.37:63341''db''kgcms''Command''Query''Time'0'State''starting''Info''SHOW FULL PROCESSLIST'}]

方法9:run_sql()

    ● 描述
         自定义查询, 直接查询SQL。
    ● 语法
1
run_sql(sql, act='list', log=True)
    ● 参数
         sql [str]:要执行的sql语句。
         act [str]:add:返回插入后的ID,list:返回list数据,act=edit|dele:返回影响的数据条数。
         log [bool]:是否记录操作日志, 建议开启。
    ● 返回值
         返回一个列表。
    ● 实例
1
return self.db.run_sql('select id,username from kg_admin where id=83''list')
1
return self.db.run_sql('insert into kg_admin(id,username) value(100,"kgtest")''add')
1
return self.db.run_sql('update kg_admin set username="kg" where id=100''edit')
pre class="brush:python;toolbar:false">return self.db.run_sql('delete from kg_admin where id=100', 'dele')     ● 结果
1
[{'id'83'username''kgcms'}]
1
100  # 返回插入的id
1
1  # 返回影响的条数
1
1  # 返回影响的条数

方法10:table_list()

    ● 描述
         获取当前库中所有的数据表表名。
    ● 语法
1
table_list(log=True)
    ● 参数
         log [bool]:是否记录操作日志, 建议开启。
    ● 返回值
         返回一个列表。
    ● 实例
1
return self.db.table_list()
    ● 结果
1
['kg_ad''kg_admin''kg_article''kg_category''kg_guestbook']

方法11:timeout()

    ● 描述
         获取MySQL自动断开连接时效。
    ● 语法
1
timeout()
    ● 参数
         无参数。
    ● 返回值
         返回一个字典。
    ● 实例
1
return self.db.timeout()
    ● 结果
1
{'Variable_name''connect_timeout''Value''10'}

方法12:version()

    ● 描述
         获取MySQL版本号。
    ● 语法
1
version()
    ● 参数
         无参数。
    ● 返回值
         返回一个字符串。
    ● 实例
1
return self.db.version()
    ● 结果
1
'5.7.24'

方法13:open()

    ● 描述
         打开数据库连接。
    ● 语法
1
open()
    ● 参数
         无参数。
    ● 返回值
         返回布尔类型。
    ● 实例
1
return self.db.open()
    ● 结果
1
Ture

方法14:close()

    ● 描述
         关闭数据库连接。
    ● 语法
1
close()
    ● 参数
         无参数。
    ● 返回值
         返回布尔类型或字符串。
    ● 实例
1
return self.db.close()
    ● 结果
1
'tools.pymysql.err.Error: Already closed'

属性

    1. total_rows:查询到的总记录条数
1
self.db.total_rows  # 调用总记录条数
    2. total_page:查询到的总页数
1
self.db.total_page  # 调用总页数
    3. sql:查询的sql语句
1
self.db.sql  # 调用执行的sql语句
    4. request_count:当前页请求数据库的次数,包括查询、修改、添加数据的总次数
1
self.db.request_count  # 调用当前页面请求数据库的次数
    5. page:查询的当前页码
1
self.db.page  # 调用当前页码

适应版本

v1.0.1