Python 之mysql类封装
一、简单封装
import pymysql class MysqlHelper(object): conn = None def __init__(self, host, username, password, db, charset='utf8', port=3306): self.host = host self.username = username self.password = password self.db = db self.charset = charset self.port = port def connect(self): self.conn = pymysql.connect(host=self.host, port=self.port, user=self.username, password=self.password, db=self.db, charset=self.charset) self.cursor = self.conn.cursor() def close(self): self.cursor.close() self.conn.close() def get_one(self, sql, params=()): result = None try: self.connect() self.cursor.execute(sql, params) result = self.cursor.fetchone() self.close() except Exception as e: print(e) return result def get_all(self, sql, params=()): list_data = () try: self.connect() self.cursor.execute(sql, params) list_data = self.cursor.fetchall() self.close() except Exception as e: print(e) return list_data def insert(self, sql, params=()): return self.__edit(sql, params) def update(self, sql, params=()): return self.__edit(sql, params) def delete(self, sql, params=()): return self.__edit(sql, params) def __edit(self, sql, params): count = 0 try: self.connect() count = self.cursor.execute(sql, params) self.conn.commit() self.close() except Exception as e: print(e) return count
二、mysql封装
import pymysql class MysqlHelper(object): conn = None def __init__(self,host, username, password, db, charset='utf8', port=3306) -> None: self.host = host self.username = username self.password = password self.db = db self.charset = charset self.port = port def connect(self): try: self.conn = pymysql.connect(host=self.host, port=self.port, user=self.username, password=self.password, db=self.db, charset=self.charset) self.cursor = self.conn.cursor() return True except: return False # 关闭数据库 def close(self): if self.conn and self.cursor: self.cursor.close() self.conn.close() return True def execute(self, sql, params=None, exe_many=False): res = self.connect() if not res: return False cnt = 0 try: if self.conn and self.cursor: if exe_many: cnt = self.cursor.executemany(sql, params) else: cnt = self.cursor.execute(sql, params) self.conn.commit() except Exception as e: return False self.close() return cnt def insert(self, **kwargs): """ table:必填,表名,如:table="test_table" data :必填,更新数据,字典类型,如:data={"aaa": "666", "bbb": "888"} """ table = kwargs["table"] data = kwargs["data"] sql = "insert into %s (" % table fields = "" values = [] flag = "" for k, v in data.items(): fields += "%s," % k values.append(str(v)) flag += "%s," fields = fields.rstrip(",") values = tuple(values) flag = flag.rstrip(",") sql += fields + ") values (" + flag + ");" try: self.execute(sql, values) # 获取自增id res = self.cursor.lastrowid return res except: self.conn.rollback() return 0 def delete(self, **kwargs): """ table:必填,表名,如:table="test_table" where:必填,删除条件,字典类型用于=,如:where={"aaa": 333, "bbb": 2};字符串类型用于非等于判断,如:where="aaa>=333" """ table = kwargs["table"] where = kwargs["where"] sql = "delete from %s where 1=1" % (table) values = [] if type(where) == dict: for k, v in where.items(): sql += " and {} in (%s)".format(k) values.append(str(v)) elif type(where) == str: sql += " and %s" % where sql += ";" values = tuple(values) try: self.execute(sql, values) rowcount = self.cursor.rowcount return rowcount except: self.conn.rollback() return 0 def update(self, **kwargs): """ table:必填,表名,如:table="test_table" data :必填,更新数据,字典类型,如:data={"aaa": "666'6", "bbb": "888"} where:必填,更新条件,字典类型用于=,如:where={"aaa": 333, "bbb": 2};字符串类型用于非等于判断,如:where="aaa>=333" """ table = kwargs["table"] data = kwargs["data"] where = kwargs["where"] sql = "update %s set " % table values = [] for k, v in data.items(): sql += "{}=%s,".format(k) values.append(str(v)) sql = sql.rstrip(",") sql += " where 1=1 " if type(where) == dict: for k, v in where.items(): sql += " and {} in (%s)".format(k) values.append(str(v)) elif type(where) == str: sql += " and %s" % where sql += ";" values = tuple(values) try: self.execute(sql, values) rowcount = self.cursor.rowcount return rowcount except: self.conn.rollback() return 0 def get_one(self, **kwargs): """ table:必填,表名,如:table="test_table" where:必填,查询条件,字典类型用于=,如:where={"aaa": 333, "bbb": 2};字符串类型用于非等于判断,如:where="aaa>=333" field: 非必填,查询列名,字符串类型,如:field="aaa, bbb",不填默认* order: 非必填,排序字段,字符串类型,如:order="ccc" sort: 非必填,排序方式,字符串类型,如:sort="asc"或者"desc",不填默认asc """ table = kwargs["table"] field = "field" in kwargs and kwargs["field"] or "*" where = kwargs["where"] order = "order" in kwargs and "order by " + kwargs["order"] or "" sort = kwargs.get("sort", "asc") if order == "": sort = "" sql = "select %s from %s where 1=1 " % (field, table) values = [] if type(where) == dict: for k, v in where.items(): sql += " and {} in (%s)".format(k) values.append(str(v)) elif type(where) == str: sql += " and %s" % where sql += " %s %s limit 1;" % (order, sort) values = tuple(values) try: self.execute(sql, values) data = self.cursor.fetchone() return data except Exception as e: self.conn.rollback() return () def get_all(self, **kwargs): """ table:必填,表名,如:table="test_table" where:必填,查询条件,字典类型用于=,如:where={"aaa": 333, "bbb": 2};字符串类型用于非等于判断,如:where="aaa>=333" field: 非必填,查询列名,字符串类型,如:field="aaa, bbb",不填默认* order: 非必填,排序字段,字符串类型,如:order="ccc" sort: 非必填,排序方式,字符串类型,如:sort="asc"或者"desc",不填默认asc offset:非必填,偏移量,如翻页,不填默认0 limit: 非必填,条数,不填默认100 """ table = kwargs["table"] field = "field" in kwargs and kwargs["field"] or "*" order = "order" in kwargs and "order by " + kwargs["order"] or "" sort = kwargs.get("sort", "asc") if order == "": sort = "" where = kwargs["where"] offset = kwargs.get("offset", 0) limit = kwargs.get("limit", 100) sql = "select %s from %s where 1=1 " % (field, table) values = [] if type(where) == dict: for k, v in where.items(): sql += " and {} in (%s)".format(k) values.append(str(v)) elif type(where) == str: sql += " and %s" % where values = tuple(values) sql += " %s %s limit %s, %s;" % (order, sort, offset, limit) try: self.execute(sql, values) data = self.cursor.fetchall() return data except: self.conn.rollback() return () def get_count(self, **kwargs): """ table:必填,表名,如:table="test_table" where:必填,查询条件,字典类型用于=,如:where={"aaa": 333, "bbb": 2};字符串类型用于非等于判断,如:where="aaa>=333" """ table = kwargs["table"] where = kwargs["where"] sql = "select count(1) as count from %s where 1=1 " % (table) values = [] if type(where) == dict: for k, v in where.items(): sql += " and {} in (%s)".format(k) values.append(str(v)) elif type(where) == str: sql += " and %s;" % where values = tuple(values) try: self.execute(sql, values) data = self.cursor.fetchone() return data[0] except: self.conn.rollback() return 0