python db類用法說明
我就廢話不多說了,大家還是直接看代碼吧~
import pymysql
class DB:
__host = 'localhost' # 服務(wù)器地址
__username = 'root' # 用戶名
__password = '' # 密碼
__database = 'test' # 數(shù)據(jù)庫(kù)
__field = '*' # 查詢字段
__where = '' # 條件
__sql = False # 是否返回sql
__join = '' # 聯(lián)表
__order = '' # 排序
__limit = '' # 數(shù)量
# 構(gòu)造函數(shù),在生成對(duì)象時(shí)調(diào)用
def __init__(self, table):
try:
# 打開數(shù)據(jù)庫(kù)連接 host, username, password, database
self.db = pymysql.connect(self.__host, self.__username, self.__password, self.__database)
except Exception as e:
print(e)
exit()
# 使用 cursor() 方法創(chuàng)建一個(gè)游標(biāo)對(duì)象 cursor
self.cursor = self.db.cursor()
self.table = table
# 析構(gòu)函數(shù),釋放對(duì)象時(shí)使用
def __del__(self):
try:
# 關(guān)閉數(shù)據(jù)庫(kù)連接
self.db.close()
except Exception as e:
print(e)
# 得到當(dāng)前sql語句
def getSql(self):
self.__sql = True
return self
# 字段
def field(self, str):
self.__field = str
return self
# 聯(lián)表
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
# 數(shù)量
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:
# 執(zhí)行sql語句
ret = self.cursor.execute(sql)
# 提交到數(shù)據(jù)庫(kù)執(zhí)行
self.db.commit()
return ret
except Exception as e:
# 如果發(fā)生錯(cuò)誤則回滾
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:
# 執(zhí)行sql語句
ret = self.cursor.execute(sql)
# 提交到數(shù)據(jù)庫(kù)執(zhí)行
self.db.commit()
return ret
except Exception as e:
# 如果發(fā)生錯(cuò)誤則回滾
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:
# 執(zhí)行sql語句
ret = self.cursor.execute(sql)
# 提交到數(shù)據(jù)庫(kù)執(zhí)行
self.db.commit()
return ret
except Exception as e:
# 如果發(fā)生錯(cuò)誤則回滾
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() 方法執(zhí)行 SQL 查詢
self.cursor.execute(sql)
# 使用 fetchall() 方法獲取所有數(shù)據(jù).
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', '趙一', '男', '學(xué)生', '8', '120', '35');
INSERT INTO `people` VALUES ('2', '錢二', '女', '學(xué)生', '9', '111', '31');
INSERT INTO `people` VALUES ('3', '孫三', '男', '學(xué)生', '10', '123', '34');
INSERT INTO `people` VALUES ('4', '李四', '女', '學(xué)生', '11', '100', '30');
'''
db = DB('people')
# 增加
dict = {'name': '周五', 'sex': '男', 'job': '學(xué)生', '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)
# 查詢 優(yōu)化where條件 'id<11'
# data = db.field('id,name,age,job').where([['id', '>', 1]]).order('id desc').limit('3').select()
# print(data)
補(bǔ)充知識(shí):python DB API cursor 常用接口
1. description
如果 cursor 執(zhí)行了查詢的 sql 代碼。那么讀取 cursor.description 屬性的時(shí)候,將返回一個(gè)列表,這個(gè)列表中裝的是元組,元組中裝的分別
是 (name,type_code,display_size,internal_size,precision,scale,null_ok) ,其中 name 代表的是查找出來的數(shù)據(jù)的字段名稱,其他參數(shù)暫時(shí)用處不大。
2. rowcount
代表的是在執(zhí)行了 sql 語句后受影響的行數(shù)。
3. close
關(guān)閉游標(biāo)。關(guān)閉游標(biāo)以后就再也不能使用了,否則會(huì)拋出異常。
4. execute(sql[,parameters])
執(zhí)行某個(gè) sql 語句。如果在執(zhí)行 sql 語句的時(shí)候還需要傳遞參數(shù),那么可以傳給 parameters 參數(shù)。示例代碼如下:
cursor.execute("select * from article where id=%s",(1,))
5. fetchone
在執(zhí)行了查詢操作以后,獲取第一條數(shù)據(jù)。
6. fetchmany(size)
在執(zhí)行查詢操作以后,獲取多條數(shù)據(jù)。具體是多少條要看傳的 size 參數(shù)。如果不傳 size 參數(shù),那么默認(rèn)是獲取第一條數(shù)據(jù)。
7. fetchall
獲取所有滿足 sql 語句的數(shù)據(jù)。
以上這篇python db類用法說明就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- python drf各類組件的用法和作用
- python定義類的簡(jiǎn)單用法
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)之靜態(tài)方法、類方法、屬性方法原理與用法分析
- Python面向?qū)ο蟪绦蛟O(shè)計(jì)之類和對(duì)象、實(shí)例變量、類變量用法分析
- python編程進(jìn)階之類和對(duì)象用法實(shí)例分析
- Python面向?qū)ο笾蓄悾╟lass)的簡(jiǎn)單理解與用法分析
- Python3變量與基本數(shù)據(jù)類型用法實(shí)例分析
- Python 面向?qū)ο笾恈lass和對(duì)象基本用法示例
- python定義類self用法實(shí)例解析
- Python中類似于jquery的pyquery庫(kù)用法分析
- Python上下文管理器類和上下文管理器裝飾器contextmanager用法實(shí)例分析
- 詳細(xì)介紹python類及類的用法
相關(guān)文章
基于python和pygame庫(kù)實(shí)現(xiàn)刮刮樂游戲
這篇文章主要介紹了如何基于python和pygame庫(kù)實(shí)現(xiàn)刮刮樂游戲,文中通過代碼示例和圖文給大家講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下2024-03-03
深入探討Python中的內(nèi)置類屬性`__repr__`
在Python中,__repr__是一個(gè)特殊的內(nèi)置類屬性,用于定義類的字符串表示形式,本文將深入探討__repr__的作用、用法以及一些實(shí)際應(yīng)用場(chǎng)景,希望對(duì)大家有所幫助2023-12-12
詳談Python 窗體(tkinter)表格數(shù)據(jù)(Treeview)
今天小編就為大家分享一篇詳談Python 窗體(tkinter)表格數(shù)據(jù)(Treeview),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-10-10
Python多線程編程threading模塊使用最佳實(shí)踐及常見問題解析
這篇文章主要為大家介紹了Python多線程編程threading模塊使用最佳實(shí)踐及常見問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-01-01
新年快樂! python實(shí)現(xiàn)絢爛的煙花綻放效果
這篇文章主要為大家詳細(xì)介紹了python利用可視化技巧實(shí)現(xiàn)煙花綻放效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01
numpy存取數(shù)據(jù)(tofile/fromfile)的實(shí)現(xiàn)
本文主要介紹了numpy存取數(shù)據(jù)(tofile/fromfile)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02
Python導(dǎo)入父文件夾中模塊并讀取當(dāng)前文件夾內(nèi)的資源
這篇文章主要給大家介紹了關(guān)于Python導(dǎo)入父文件夾中模塊并讀取當(dāng)前文件夾內(nèi)資源的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

