python操作mysql數(shù)據(jù)庫的精美實用模塊(二次升級版)

寫在前面

之前,以前分享過兩篇python操作mysql數(shù)據(jù)庫的文章:
《python操作mysql數(shù)據(jù)庫的精美實用模塊》
《python操作mysql數(shù)據(jù)庫的精美實用模塊(升級版)》

好了,今天繼續(xù)升級,二次升級。

為何又升級呢?緣起是,在實際項目開發(fā)中,當(dāng)前的模塊都是基于列表來操作,當(dāng)面對復(fù)雜表格時就會很不方便,嚴(yán)重影響開發(fā)效率和開發(fā)體驗。

所以,非常有必要,將當(dāng)前的模塊,從基于列表轉(zhuǎn)為基于字典,來進行操作。

然后,網(wǎng)上資料一頓查,終于成功升級了。來吧,不啰嗦,分享給大家!

python操作mysql數(shù)據(jù)庫的精美實用模塊—— DBUtils連接池版

import pymysql
from dbutils.pooled_db import PooledDB
#############################################################################################
# 連接mysql數(shù)據(jù)庫-----使用數(shù)據(jù)庫連接池技術(shù)----dbutils庫
#############################################################################################
db_pool = PooledDB(
    creator=pymysql,  # 使用鏈接數(shù)據(jù)庫的模塊
    maxconnections=800,  # 連接池允許的最大連接數(shù),0和None表示不限制連接數(shù)
    mincached=8,  # 初始化時,鏈接池中至少創(chuàng)建的空閑的鏈接,0表示不創(chuàng)建
    blocking=True,  # 連接池中如果沒有可用連接后,是否阻塞等待。True,等待;False,不等待然后報錯
    maxusage=None,  # 一個鏈接最多被重復(fù)使用的次數(shù),None表示無限制
    setsession=[],  # 開始會話前執(zhí)行的命令列表。如:["set datestyle to ...", "set time zone ..."]
    ping=0,   # ping MySQL服務(wù)端,檢查是否服務(wù)可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always

    host='127.0.0.1',
    port=3306,
    user='root'
    password='root',
    database='mydbdemo',
    charset='utf8'
)



class DBManager():
    # 創(chuàng)建數(shù)據(jù)庫連接
    def __init__(self):
        self.db = db_pool.connection()

    # 關(guān)閉數(shù)據(jù)庫連接
    def closeDB(self):
        self.db.close()


    #連接數(shù)據(jù)庫,執(zhí)行插入SQl
    def executeQueryID(self,sqlstring):
        try:
            cursor = self.db.cursor()
            cursor.execute(sqlstring)
            self.db.commit()
            the_id = int(cursor.lastrowid)
            #the_id = int(db.insert_id())
            return the_id
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接




    # 連接數(shù)據(jù)庫,執(zhí)行SQl,無返回
    def executeQueryNO(self, sqlstring):
        try:
            cursor = self.db.cursor()
            cursor.execute(sqlstring)
            self.db.commit()
            return True
        except Exception:
            self.db.rollback()
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接


    #連接數(shù)據(jù)庫,執(zhí)行SQL,返回單條數(shù)據(jù)
    def executeQueryone(self, sqlstring):
        try:
            cursor = self.db.cursor()
            cursor.execute(sqlstring)
            dataone = cursor.fetchone()
            return dataone
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接

    #連接數(shù)據(jù)庫,執(zhí)行SQL,返回多條數(shù)據(jù)
    def executeQueryall(self, sqlstring):
        try:
            cursor = self.db.cursor()
            cursor.execute(sqlstring)
            dataall = cursor.fetchall()
            return dataall
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接

    #######二次升級版###############################################
    # 查詢單條數(shù)據(jù)
    def select_dataone_dict(self,sqlstring):
        try:
            cursor = self.db.cursor(cursor = DictCursor)
            cursor.execute(sqlstring)
            dataone = cursor.fetchone()
            return dataone
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接



    # 查詢前n行數(shù)據(jù)
    def select_datamany_dict(self,sqlstring,manyncount):
        try:
            cursor = self.db.cursor(cursor = DictCursor)
            cursor.execute(sqlstring)
            datamany = cursor.fetchmany(manyncount)
            return datamany
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接



    # 查詢所有數(shù)據(jù)
    def select_dataall_dict(self,sqlstring):
        try:
            cursor = self.db.cursor(cursor = DictCursor)
            cursor.execute(sqlstring)
            dataall = cursor.fetchall()
            return dataall
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接



    #  插入單條數(shù)據(jù)
    def insert_dataone_dict(self,table,dataone):
        try:
            sqlstring = self.generate_sqlstring_insert(table, dataone)
            cursor = self.db.cursor()
            cursor.execute(sqlstring,dataone)
            self.db.commit()
            the_id = int(cursor.lastrowid)
            return the_id
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接



    # 插入多條數(shù)據(jù)
    def insert_datamany_dict(self,table,datamany):
        try:
            sqlstring = self.generate_sqlstring_insert(table, datamany[0])
            cursor = self.db.cursor()
            cursor.executemany(sqlstring,datamany)
            self.db.commit()
            return True
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接




    # 更新數(shù)據(jù)
    def update_data_dict(self,table,data,where):
        try:
            sqlstring = self.generate_sqlstring_update(table, data,where)
            cursor = self.db.cursor()
            cursor.execute(sqlstring,data)
            self.db.commit()
            return True
        except Exception:
            self.db.rollback()
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接



    # 刪除數(shù)據(jù)
    def delete_data_dict(self,table,where):
        try:
            sqlstring = self.generate_sqlstring_delete(table, where)
            cursor = self.db.cursor()
            cursor.execute(sqlstring)
            self.db.commit()
            return True
        except Exception:
            self.db.rollback()
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接




    # 生成sql語句-----插入
    def generate_sqlstring_insert(self, table, data):
        cols_name = ", ".join(f'`{key}`' for key in data.keys())
        cols_value = ', '.join(f'%({key})s' for key in data.keys())
        sqlstring = f"INSERT INTO {table} ({cols_name}) VALUES ({cols_value})"
        return sqlstring




    # 生成sql語句----更新
    def generate_sqlstring_update(self, table, data,where):
        cols = ", ".join(f'`{key}`=%({key})s' for key in data.keys())
        sqlstring = f"UPDATE {table} SET {cols} {where}"
        return sqlstring



    # 生成sql語句----刪除
    def generate_sqlstring_delete(self, table ,where):
        sqlstring = f"DELETE FROM {table} {where}"
        return sqlstring



python操作mysql數(shù)據(jù)庫的精美實用模塊——非連接池版

##############################################################################################
# 連接mysql數(shù)據(jù)庫
#############################################################################################
class DBManager_Old():
    # 創(chuàng)建數(shù)據(jù)庫連接
    def __init__(self):
        db_config = ConfigManager.get_db_config()
        self.db = pymysql.Connect(
        host='127.0.0.1',
        port=3306,
        user='root',
        passwd='root',
        db='mydbdemo',
        charset='utf8')

    # 關(guān)閉數(shù)據(jù)庫連接
    def closeDB(self):
        self.db.close()

    #連接數(shù)據(jù)庫,執(zhí)行插入SQl
    def executeQueryID(self,sqlstring):
        try:
            cursor = self.db.cursor()
            cursor.execute(sqlstring)
            self.db.commit()
            the_id = int(cursor.lastrowid)
            #the_id = int(db.insert_id())
            return the_id
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接




    # 連接數(shù)據(jù)庫,執(zhí)行SQl,無返回
    def executeQueryNO(self, sqlstring):
        try:
            cursor = self.db.cursor()
            cursor.execute(sqlstring)
            self.db.commit()
            return True
        except Exception:
            self.db.rollback()
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接


    #連接數(shù)據(jù)庫,執(zhí)行SQL,返回單條數(shù)據(jù)
    def executeQueryone(self, sqlstring):
        try:
            cursor = self.db.cursor()
            cursor.execute(sqlstring)
            dataone = cursor.fetchone()
            return dataone
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接

    #連接數(shù)據(jù)庫,執(zhí)行SQL,返回多條數(shù)據(jù)
    def executeQueryall(self, sqlstring):
        try:
            cursor = self.db.cursor()
            cursor.execute(sqlstring)
            dataall = cursor.fetchall()
            return dataall
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接


    #######二次升級版###############################################
    # 查詢單條數(shù)據(jù)
    def select_dataone_dict(self,sqlstring):
        try:
            cursor = self.db.cursor(cursor = DictCursor)
            cursor.execute(sqlstring)
            dataone = cursor.fetchone()
            return dataone
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接



    # 查詢前n行數(shù)據(jù)
    def select_datamany_dict(self,sqlstring,manyncount):
        try:
            cursor = self.db.cursor(cursor = DictCursor)
            cursor.execute(sqlstring)
            datamany = cursor.fetchmany(manyncount)
            return datamany
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接



    # 查詢所有數(shù)據(jù)
    def select_dataall_dict(self,sqlstring):
        try:
            cursor = self.db.cursor(cursor = DictCursor)
            cursor.execute(sqlstring)
            dataall = cursor.fetchall()
            return dataall
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接



    #  插入單條數(shù)據(jù)
    def insert_dataone_dict(self,table,dataone):
        try:
            sqlstring = self.generate_sqlstring_insert(table, dataone)
            cursor = self.db.cursor()
            cursor.execute(sqlstring,dataone)
            self.db.commit()
            the_id = int(cursor.lastrowid)
            return the_id
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接



    # 插入多條數(shù)據(jù)
    def insert_datamany_dict(self,table,datamany):
        try:
            sqlstring = self.generate_sqlstring_insert(table, datamany[0])
            cursor = self.db.cursor()
            cursor.executemany(sqlstring,datamany)
            self.db.commit()
            return True
        except Exception:
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接




    # 更新數(shù)據(jù)
    def update_data_dict(self,table,data,where):
        try:
            sqlstring = self.generate_sqlstring_update(table, data,where)
            cursor = self.db.cursor()
            cursor.execute(sqlstring,data)
            self.db.commit()
            return True
        except Exception:
            self.db.rollback()
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接



    # 刪除數(shù)據(jù)
    def delete_data_dict(self,table,where):
        try:
            sqlstring = self.generate_sqlstring_delete(table, where)
            cursor = self.db.cursor()
            cursor.execute(sqlstring)
            self.db.commit()
            return True
        except Exception:
            self.db.rollback()
            return False
        finally:
            self.db.close()  # 關(guān)閉數(shù)據(jù)庫連接




    # 生成sql語句-----插入
    def generate_sqlstring_insert(self, table, data):
        cols_name = ", ".join(f'`{key}`' for key in data.keys())
        cols_value = ', '.join(f'%({key})s' for key in data.keys())
        sqlstring = f"INSERT INTO {table} ({cols_name}) VALUES ({cols_value})"
        return sqlstring




    # 生成sql語句----更新
    def generate_sqlstring_update(self, table, data,where):
        cols = ", ".join(f'`{key}`=%({key})s' for key in data.keys())
        sqlstring = f"UPDATE {table} SET {cols} {where}"
        return sqlstring



    # 生成sql語句----刪除
    def generate_sqlstring_delete(self, table ,where):
        sqlstring = f"DELETE FROM {table} {where}"
        return sqlstring




?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容