我就废话不多说了,大家还是直接看代码吧~
import pymysql class DB: __host = 'localhost' # 服务器地址 __username = 'root' # 用户名 __password = '' # 密码 __database = 'test' # 数据库 __field = '*' # 查询字段 __where = '' # 条件 __sql = False # 是否返回sql __join = '' # 联表 __order = '' # 排序 __limit = '' # 数量 # 构造函数,在生成对象时调用 def __init__(self, table): try: # 打开数据库连接 host, username, password, database self.db = pymysql.connect(self.__host, self.__username, self.__password, self.__database) except Exception as e: print(e) exit() # 使用 cursor() 方法创建一个游标对象 cursor self.cursor = self.db.cursor() self.table = table # 析构函数,释放对象时使用 def __del__(self): try: # 关闭数据库连接 self.db.close() except Exception as e: print(e) # 得到当前sql语句 def getSql(self): self.__sql = True return self # 字段 def field(self, str): self.__field = str return self # 联表 def join(self, table, where): self.__join = ' LEFT JOIN ' + table + ' ON ' + where + ' ' return self # 条件 def where(self, param): self.__where = ' WHERE ' if isinstance(param, list): for i in param: if isinstance(i[2], list): tmp = '(' for j in i[2]: tmp += str(j) + ',' tmp += ')' self.__where += '`' + i[0] + '` ' + i[1] + ' ' + tmp + ' AND ' else: self.__where += '`' + i[0] + '` ' + i[1] + ' ' + str(i[2]) + ' AND ' else: self.__where = self.__where[0:-4] else: self.__where += param return self # 排序 def order(self, str): self.__order = ' ORDER BY ' + str return self # 数量 def limit(self, str): self.__limit = ' LIMIT ' + str return self # 增加 def insert(self, dict): key = value = '' for k, v in dict.items(): key += '`' + k + '`,' value += '"' + v + '",' key = key[0:-1] value = value[0:-1] sql = 'INSERT INTO ' + self.table + ' (' + key + ') VALUES (' + value + ')' if self.__sql: return sql try: # 执行sql语句 ret = self.cursor.execute(sql) # 提交到数据库执行 self.db.commit() return ret except Exception as e: # 如果发生错误则回滚 self.db.rollback() print(e) return 0 # 删除 def delete(self): if self.__where: sql = "DELETE FROM " + self.table + self.__where if self.__sql: return sql try: # 执行sql语句 ret = self.cursor.execute(sql) # 提交到数据库执行 self.db.commit() return ret except Exception as e: # 如果发生错误则回滚 self.db.rollback() print(e) return 0 else: raise BaseException('没有条件') # 抛异常 # 修改 def update(self, dict): str = '' for k, v in dict.items(): str += '`' + k + '`="' + v + '",' str = str[0:-1] sql = 'UPDATE ' + self.table + ' SET ' + str if self.__where: sql += self.__where if self.__sql: return sql try: # 执行sql语句 ret = self.cursor.execute(sql) # 提交到数据库执行 self.db.commit() return ret except Exception as e: # 如果发生错误则回滚 self.db.rollback() print(e) return 0 # 查询 def select(self): sql = "SELECT " + self.__field + " FROM " + self.table if self.__join: sql += self.__join if self.__where: sql += self.__where if self.__order: sql += self.__order if self.__limit: sql += self.__limit if self.__sql: return sql # 使用 execute() 方法执行 SQL 查询 self.cursor.execute(sql) # 使用 fetchall() 方法获取所有数据. data = self.cursor.fetchall() return data ''' DROP TABLE IF EXISTS `people`; CREATE TABLE `people` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '名字', `sex` varchar(7) DEFAULT '' COMMENT '性别', `job` varchar(6) DEFAULT '' COMMENT '工作', `age` varchar(6) DEFAULT '' COMMENT '年龄', `height` varchar(6) DEFAULT '' COMMENT '身高', `weight` varchar(6) DEFAULT '' COMMENT '体重', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8; INSERT INTO `people` VALUES ('1', '赵一', '男', '学生', '8', '120', '35'); INSERT INTO `people` VALUES ('2', '钱二', '女', '学生', '9', '111', '31'); INSERT INTO `people` VALUES ('3', '孙三', '男', '学生', '10', '123', '34'); INSERT INTO `people` VALUES ('4', '李四', '女', '学生', '11', '100', '30'); ''' db = DB('people') # 增加 dict = {'name': '周五', 'sex': '男', 'job': '学生', 'age': '8', 'height': '121', 'weight': '32'} data = db.insert(dict) print(data) # 删除 # data = db.where('id=6').delete() # print(data) # 修改 # dict = {'age': '9', 'height': '121', 'weight': '31'} # data = db.where('id=7').update(dict) # print(data) # 查询 优化where条件 'id<11' # data = db.field('id,name,age,job').where([['id', '>', 1]]).order('id desc').limit('3').select() # print(data)
补充知识:python DB API cursor 常用接口
1. description
如果 cursor 执行了查询的 sql 代码。那么读取 cursor.description 属性的时候,将返回一个列表,这个列表中装的是元组,元组中装的分别
是 (name,type_code,display_size,internal_size,precision,scale,null_ok) ,其中 name 代表的是查找出来的数据的字段名称,其他参数暂时用处不大。
2. rowcount
代表的是在执行了 sql 语句后受影响的行数。
3. close
关闭游标。关闭游标以后就再也不能使用了,否则会抛出异常。
4. execute(sql[,parameters])
执行某个 sql 语句。如果在执行 sql 语句的时候还需要传递参数,那么可以传给 parameters 参数。示例代码如下:
cursor.execute("select * from article where id=%s",(1,))
5. fetchone
在执行了查询操作以后,获取第一条数据。
6. fetchmany(size)
在执行查询操作以后,获取多条数据。具体是多少条要看传的 size 参数。如果不传 size 参数,那么默认是获取第一条数据。
7. fetchall
获取所有满足 sql 语句的数据。
以上这篇python db类用法说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
python,db类
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新日志
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]
- Tank《我不伟大,至少我能改变我。》[FLAC/分轨][236.89MB]
- CD圣经推荐-夏韶声《谙2》SACD-ISO
- 钟镇涛-《百分百钟镇涛》首批限量版SACD-ISO
- 群星《继续微笑致敬许冠杰》[低速原抓WAV+CUE]
- 潘秀琼.2003-国语难忘金曲珍藏集【皇星全音】【WAV+CUE】
- 林东松.1997-2039玫瑰事件【宝丽金】【WAV+CUE】