亚洲精品国产综合久久久久紧_97精品国产亚洲_人妻体内射精一区二区三区_国产精品原创在线观看不卡_一本在线免费视频
    KGCMS數據庫操作對象:kyger.db.MySQL
    2021-12-14
  
調用

  1.在項目的web目錄下的py文件通過(guò)定義接口KgcmsApi類(lèi),就可以直接調用self.db來(lái)操作數據庫。   
class KgcmsApi(object):
    """產(chǎn)品模塊類(lèi)"""
 
    def __init__(self):
        """初始化數據"""
        pass
     
    def __call__(self):
        """接口文件"""
        return self.db.__doc__

  2.在項目的kyger目錄中的模塊如果需要操作數據庫,需要在web目錄下的py文件中將self.db做為參數傳遞:   
# 文件目錄:web/article.py。 創(chuàng  )建實(shí)例article時(shí)將self.db當做參數傳遞。
class KgcmsApi(object):
    """KGCMS框架接口"""
 
    def __init__(self):
        pass
 
    def __call__(self):
        from kyger.article import Article
        article = Article(self.db)
        return 0
  
# 文件目錄:kyger/article.py
class Article(object):
    """文章調用"""
    # 構造函數
    def __init__(self, db=None):
        # 如果創(chuàng  )建實(shí)例時(shí)將db傳遞過(guò)來(lái)則直接賦值給self.db使用,如果沒(méi)有則需要創(chuàng  )建
        from kyger.db import MySQL
        self.db = db if db else MySQL()  # 防止因為沒(méi)有傳遞self.db導致操作數據庫出錯

方法1:add()

  描述:往指定的表里插入數據,SQL語(yǔ)句:INSERT INTO `kgcms`.`kg_admin` (`id` ,`username`) VALUES (NULL , 'kyger'),。

語(yǔ)法
  
add(table, data, log=True)

參數

  table [str]:表名,不包含前綴。
  data [str]:要插入的數據字典,對應的字段名及值: {'id':'NULL','username':'kyger'}。
  log [bool]:是否記錄操作日志, 一般情況下建議開(kāi)啟。

返回值

  log [bool]:返回一個(gè)字符串或0。

實(shí)例
  
data = {
   'username': 'admin',
   'password': '123456',
   'encryption': 0,
}
return self.db.add('admin', data)  # 往admin表中添加數據

結果
  
'23'  # 返回插入數據的id


方法2:dele()

  描述:刪除數據操作,SQL語(yǔ)句:DELETE FROM `kg_admin` WHERE `kg_admin`. `id` = 20;。

語(yǔ)法
  
dele(table, where, limit=0, log=True)

參數

  table [str]:表名,不包含前綴。
  where [int|str]:條件, 如果int類(lèi)型將視為id;其它視為條件語(yǔ)句: 20|`username` = 'kyger' && ...
   不支持刪除全部,但可使用條件 1=1 達到刪除部分數據。
  limit [int]:刪除的記錄條數。
  log [bool]:是否記錄操作日志, 建議開(kāi)啟。

返回值

  返回一個(gè)int類(lèi)型數據。

實(shí)例
  
return self.db.dele('article', 14)
  
return self.db.dele('article', '`id` >13')

結果
  
1  # 返回刪除的數據條數


方法3:edit()

  描述:修改/更新數據,SQL語(yǔ)句:UPDATE `kg_admin` SET `password` = '999' WHERE `kg_admin`.`id` = 2;。

語(yǔ)法
edit(table, data, where=None, limit=0, log=True)

參數

  table [str]:表名,不包含前綴。
  data [dict]:要修改的字段名及值:{'username':'kyger', 'password': '123456'}。
  where [int|str]:條件,如果是一個(gè)數字將視為id;為0時(shí)忽略條件,將更新所有記錄; 其它視為條件語(yǔ)句::20|`username` = 'kyger' && ...。
  limit [int]:影響的記錄數,0時(shí)不限制。
  log [bool]:是否記錄操作日志, 建議開(kāi)啟。

返回值

  返回一個(gè)int類(lèi)型數據。

實(shí)例
  
return self.db.edit('admin', {'username':'kyger', 'password': '123456'}, 5, 1)

結果
  
1  # 返回影響的數據條數


方法4:field_list()

  描述:獲取數據表里所有的字段名屬性。

語(yǔ)法
  
field_list(table, log=True)

參數

  table [str]:表名,不包含前綴。
  log [bool]:是否記錄操作日志, 建議開(kāi)啟。

返回值

  返回一個(gè)列表。

實(shí)例
  
return self.db.field_list('test')

結果
  
# 獲取數據表里所有的字段名和屬性
[{'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 操作產(chǎn)生的ID。

語(yǔ)法
  
lastrowid()

參數

  無(wú)參數。

實(shí)例
  
return self.db.lastrowid()

結果
  
5  # 上一次插入數據的id


方法6:list()

  描述:查詢(xún)數據,查詢(xún)中所有的表名前綴使用{pr}代替。

語(yǔ)法
  
list(table, field='*', where=0, order=0, page=0, limit=30, shift=0, log=False)

參數

  table [str]:表名,form語(yǔ)句,或多表關(guān)聯(lián),前綴使用 {pr} 代替,單個(gè)表名時(shí)不需要加前綴。
  field [str]:查詢(xún)的字段,默認為 *。
  where [str]:條件語(yǔ)句, 如果是一個(gè) int 值,則自動(dòng)轉化為:WHERE `id` = "%s"'。
  order [str]:排序:`id` ASC, `name` DESC。
  page [int]:當前頁(yè)碼,是否分頁(yè),0不分頁(yè);其它數字為頁(yè)碼;分頁(yè)時(shí)可以通過(guò) total 獲取總記錄數。
  limit [int|str]:分頁(yè)時(shí)只填寫(xiě)一個(gè)數字,每頁(yè)要顯示的記錄數: '0, 30'|10。
  shitf [int]:是否將二維列表成一維,1轉成一維、0不轉換,查詢(xún)單條記錄時(shí)非常有用。
  log [bool]:是否記錄操作日志, 查詢(xún)敏感數據時(shí)建議開(kāi)啟。

返回值

  log [bool]:返回一個(gè)列表。

實(shí)例
  
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,
)

結果
  
[{'id': 90, 'username': 'admin'}, {'id': 92, 'username': 'kgcms888'}, {'id': 93, 'username': 'kgcms2'}]


方法7:log()

  描述:獲取數據庫操作日志記錄。

語(yǔ)法
  
log(type=1, info={'state': 'SUCCESS'})

參數

  type [int]:日志類(lèi)型(1查詢(xún)敏感數據/2添加數據/3修改數據/4刪除數據/5其它數據庫操作/6后臺管理員登錄/7上傳文件)。
  info [dict]:MySQL json。state: [SUCCESS|FAILURE] 結果。

返回值

  無(wú)返回值。

實(shí)例
  
return self.db.log(type=5, info={'state': 'SUCCESS'})

結果
  
# 暫無(wú)結果


方法8:processlist()

  描述:查詢(xún)當前對應的 MySQL 帳戶(hù)運行的線(xiàn)程,查看MySQL連接列表。

語(yǔ)法
  
processlist()

參數

  無(wú)參數

返回值

  返回一個(gè)列表。

實(shí)例
return self.db.processlist()

結果
[{'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()

  描述:自定義查詢(xún), 直接查詢(xún)SQL。

語(yǔ)法
  
run_sql(sql, act='list', log=True)

參數

  sql [str]:要執行的sql語(yǔ)句。
  act [str]:add:返回插入后的ID,list:返回list數據,act=edit|dele:返回影響的數據條數。
  act [str]:log [bool]:是否記錄操作日志, 建議開(kāi)啟。

返回值

  返回一個(gè)列表。

實(shí)例
  
return self.db.run_sql('select id,username from kg_admin where id=83', 'list')
  
return self.db.run_sql('insert into kg_admin(id,username) value(100,"kgtest")', 'add')
  
return self.db.run_sql('update kg_admin set username="kg" where id=100', 'edit')
  
return self.db.run_sql('delete from kg_admin where id=100', 'dele') 

結果
  
[{'id': 83, 'username': 'kgcms'}]
  
100  # 返回插入的id
  
1  # 返回影響的條數
  
1  # 返回影響的條數


方法10:table_list()

  描述:獲取當前庫中所有的數據表表名。

語(yǔ)法
  
table_list(log=True)

參數

  log [bool]:是否記錄操作日志, 建議開(kāi)啟。

返回值

  返回一個(gè)列表。

實(shí)例
  
return self.db.table_list()

結果
  
['kg_ad', 'kg_admin', 'kg_article', 'kg_category', 'kg_guestbook']


方法11:timeout()

  描述:獲取MySQL自動(dòng)斷開(kāi)連接時(shí)效。

語(yǔ)法
  
timeout()

參數

  無(wú)參數。

返回值

  返回一個(gè)字典。

實(shí)例
  
return self.db.timeout()

結果
  
{'Variable_name': 'connect_timeout', 'Value': '10'}


方法12:version()

  描述:獲取MySQL版本號。

語(yǔ)法
  
version()

參數

  無(wú)參數。

返回值

  返回一個(gè)字符串。

實(shí)例
  
return self.db.version()

結果
  
'5.7.24'


方法13:open()

結果
  
'5.7.24'


方法14:close()

  描述:關(guān)閉數據庫連接。

語(yǔ)法
  
close()

參數

  無(wú)參數。

返回值

  返回布爾類(lèi)型或字符串。

實(shí)例
  
return self.db.close()

結果
  
'tools.pymysql.err.Error: Already closed'

屬性

  1. total_rows:查詢(xún)到的總記錄條數   
self.db.total_rows  # 調用總記錄條數

  2. total_page:查詢(xún)到的總頁(yè)數   
self.db.total_page  # 調用總頁(yè)數

  3. sql:查詢(xún)的sql語(yǔ)句   
self.db.sql  # 調用執行的sql語(yǔ)句

  4. request_count:當前頁(yè)請求數據庫的次數,包括查詢(xún)、修改、添加數據的總次數   
self.db.request_count  # 調用當前頁(yè)面請求數據庫的次數數

  5. page:查詢(xún)的當前頁(yè)碼   
self.db.page  # 調用當前頁(yè)碼

適應版本

  v1.0.1

亚洲精品国产综合久久久久紧_97精品国产亚洲_人妻体内射精一区二区三区_国产精品原创在线观看不卡_一本在线免费视频