Python_操作mysql娩脾,實(shí)現(xiàn)基礎(chǔ)增刪改查

關(guān)于第四節(jié)課,Python操作MYSQL的學(xué)習(xí)和應(yīng)用實(shí)踐作業(yè)打毛。

內(nèi)容大綱:
——主要為簡單的數(shù)據(jù)增刪改查柿赊。
1.定義類俩功,創(chuàng)建數(shù)據(jù)庫鏈接方法、operateOne/insertMore/selectOne/selectAll方法碰声、數(shù)據(jù)庫關(guān)閉方法诡蜓。
2.定義表中插入單條/多條數(shù)據(jù)(實(shí)例化類,調(diào)用insertMore/operateOne)
3.定義表中刪除單條/多條數(shù)據(jù)(實(shí)例化類胰挑,調(diào)用operateOne)
4.定義表中修改單條/多條數(shù)據(jù)(實(shí)例化類蔓罚,調(diào)用operateOne)
5.定義表中查詢單條/多條數(shù)據(jù)(實(shí)例化類,調(diào)用selectOne/selectAll)

加個課程地址方便自己回顧:
https://m.qlchat.com/live/channel/channelPage/840000174025863.htm

代碼如下
python3.5環(huán)境瞻颂,pycharm編輯器

  • 定義類脚粟,創(chuàng)建數(shù)據(jù)庫鏈接方法、operateOne/insertMore/selectOne/selectAll方法蘸朋、數(shù)據(jù)庫關(guān)閉方法核无。
#-*-coding:utf-8-*-

import pymysql, logging, os, time

class OperationDb_interface(object):
    # 創(chuàng)建數(shù)據(jù)庫鏈接、創(chuàng)建游標(biāo)
    def __init__(self, host, user, passwd, db, port, charset='utf8'):
        # 創(chuàng)建數(shù)據(jù)庫鏈接
        self.conn = pymysql.connect(
                                    host= host,
                                    user= user,
                                    passwd= passwd,
                                    db='yui_test',
                                    port=3306,
                                    charset = charset)
        self.cur = self.conn.cursor() # 創(chuàng)建一個游標(biāo)

    # 定義單條數(shù)據(jù)操作藕坯,增刪改
    def operateOne(self, sql):
        try:
            self.cur.execute(sql) # 在游標(biāo)下執(zhí)行sql語句
            self.conn.commit() # 提交到數(shù)據(jù)庫
            return True
            # print("Successfully operate one data!")
        except pymysql.Error as e:
            print("Mysql Error %d: %s" % (e.args[0], e.args[1]))
            # print("error_info: %s" % e)
            # 保存在當(dāng)前.py文件所在目錄下
            filedate = time.strftime("%Y%m%d%H:%M:%S_", time.localtime()).replace(':','')  # 獲取當(dāng)前日期和時間团南,文件名不能包含冒號":",去除冒號
            logging.basicConfig(filename= os.path.join(os.getcwd(), './' + filedate + 'log.txt'),
                                level = logging.DEBUG,
                                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
            logger = logging.getLogger(__name__)
            logger.exception(e)
            return False

    # 定義表中插入多條數(shù)據(jù)
    def insertMore(self, condition, args):
        try:
            self.cur.executemany(condition, args) # 在游標(biāo)下插入多條數(shù)據(jù)
            self.conn.commit()
            return True
            # print("Successfully insert more data!")
        except pymysql.Error as e:
            results = "SQL10001" #數(shù)據(jù)庫執(zhí)行錯誤
            print("Mysql Error %d: %s" % (e.args[0], e.args[1]))
            # print("error_info: %s" %e)
            # 保存在當(dāng)前.py文件所在目錄下
            filedate = time.strftime("%Y%m%d%H:%M:%S_", time.localtime()).replace(':','')  # 獲取當(dāng)前日期和時間炼彪,文件名不能包含冒號":"吐根,去除冒號
            logging.basicConfig(filename= os.path.join(os.getcwd(), './' + filedate + 'log.txt'),
                                level = logging.DEBUG,
                                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
            logger = logging.getLogger(__name__)
            logger.exception(e)
            return False

    # 查詢表中單條數(shù)據(jù)
    def selectOne(self, condition):
        try:
            self.cur.execute(condition) # 在游標(biāo)下獲取一條數(shù)據(jù)
            results = self.cur.fetchone() # 獲取一條結(jié)果
        except pymysql.Error as e:
            results = "SQL10001"  # 數(shù)據(jù)庫執(zhí)行錯誤
            print("Mysql Error %d: %s" % (e.args[0], e.args[1]))
            # print("error_info: %s" %e)
            # 保存在當(dāng)前.py文件所在目錄下
            filedate = time.strftime("%Y%m%d%H:%M:%S_", time.localtime()).replace(':', '')  # 獲取當(dāng)前日期和時間,文件名不能包含冒號":"辐马,去除冒號
            logging.basicConfig(filename=os.path.join(os.getcwd(), './' + filedate + 'log.txt'),
                                level=logging.DEBUG,
                                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
            logger = logging.getLogger(__name__)
            logger.exception(e)
        finally:
            return results

    # 查詢表中多條數(shù)據(jù)
    def selectAll(self, condition):
        try:
            self.cur.execute(condition) # 在游標(biāo)下執(zhí)行語句
            self.cur.scroll(0, mode='absolute') # 光標(biāo)回到初始位置
            results = self.cur.fetchall() # 返回游標(biāo)中所有結(jié)果
        except pymysql.Error as e:
            results = "SQL10001"  # 數(shù)據(jù)庫執(zhí)行錯誤
            print("Mysql Error %d: %s" % (e.args[0], e.args[1]))
            # print("error_info: %s" %e)
            # 保存在當(dāng)前.py文件所在目錄下
            filedate = time.strftime("%Y%m%d%H:%M:%S_", time.localtime()).replace(':', '')  # 獲取當(dāng)前日期和時間拷橘,文件名不能包含冒號":",去除冒號
            logging.basicConfig(filename=os.path.join(os.getcwd(), './' + filedate + 'log.txt'),
                                level=logging.DEBUG,
                                format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
            logger = logging.getLogger(__name__)
            logger.exception(e)
        finally:
            return results

    # 數(shù)據(jù)庫關(guān)閉
    def __del__(self):
        if self.cur != None:
            self.cur.close() # 關(guān)閉游標(biāo)鏈接
        if self.conn != None:
            self.conn.close() # 關(guān)閉數(shù)據(jù)庫鏈接
        # 會在下面的print執(zhí)行完后自動執(zhí)行


  • 實(shí)例化類喜爷,調(diào)用方法
# SQL Connection Config
host = 'localhost'
user = 'root'
passwd = 'root'
db = 'yui_test'
port = 3306

if __name__ == "__main__":

    # 實(shí)例化類
    test = OperationDb_interface(host, user, passwd, db, port)

    # 1.1定義表中插入單條數(shù)據(jù)
    insertOne_sql = '''insert into yui_user (name, sex, dept, birth, age)
                      values('小明2',1,'人事部','1989-05-06',28);'''
    insertOne_result = test.operateOne(insertOne_sql)
    print(insertOne_result)


    # 1.2定義表中插入多條數(shù)據(jù)
    data = [
        ('Sherry', '0'),
        ('Mike', '1'),
        ('Sunday', '0')
    ]
    insertMore_sql = '''insert into yui_user(name, sex)
                        values (%s, %s);'''
    insertMore_result = test.insertMore(insertMore_sql, data)
    print(insertMore_result)


    # 2.1定義表中刪除單條數(shù)據(jù)
    delOne_sql = "delete from yui_user where name ='Mike';"
    delOne_result = test.operateOne(delOne_sql)


    # 2.2定義表中刪除多條數(shù)據(jù)
    data = [
        ('Sherry'),
        ('Saturday')
    ]
    for names in data:
        delMore_sql = "delete from yui_user where name = \'%s\';" % names
        delMore_result = test.operateOne(delMore_sql)
        print(delMore_result)


    # 3.1定義表中更新單條數(shù)據(jù)
    updateOne_sql = "update yui_user set dept = '財務(wù)部' where name = 'Mike';"
    updateOne_result = test.operateOne(updateOne_sql)
    print(updateOne_result)


    # 3.2定義表中更新多條數(shù)據(jù)
    data = {
        'Sherry':'技術(shù)部',
        'Mike':'財務(wù)部',
        'Sunday':'技術(shù)部'
    }
    for key in data:
        updateMore_sql = "update yui_user set dept = \'%s\' where name = \'%s\';" % (data[key], key)
        updateMore_result = test.operateOne(updateMore_sql)
        print(updateMore_result)


    # 4.1查詢表中單條數(shù)據(jù)
    selectOne_sql = "select * from yui_user where dept = '財務(wù)部';"
    selectOne_result = test.selectOne(selectOne_sql)
    print(selectOne_result)

    # 4.2查詢表中多條數(shù)據(jù)
    # selectAll_sql = "select * from yui_user where dept = '人事部';"
    selectAll_sql = "select * from yui_user;"
    selectAll_result = test.selectAll(selectAll_sql)
    # print(selectAll_result)
    for row in selectAll_result:
        pdx = str(row[0])
        name = str(row[1])
        sex = str(row[2])
        dept = str(row[3])
        birth = str(row[4])
        age = str(row[5])
        print(("pdx = %s, name = %s, sex = %s, dept = %s, birth = %s, age = %s") % \
            (pdx, name, sex, dept, birth, age))

在實(shí)踐過程中其實(shí)碰到很多很多小問題冗疮,由于沒有代碼基礎(chǔ)還會犯很多基礎(chǔ)性編程錯誤和理解錯誤。之后希望能把遇到的坑也補(bǔ)充寫起來檩帐。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末术幔,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子湃密,更是在濱河造成了極大的恐慌诅挑,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件泛源,死亡現(xiàn)場離奇詭異拔妥,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)达箍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門没龙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事兜畸∨停” “怎么了碘梢?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵咬摇,是天一觀的道長。 經(jīng)常有香客問我煞躬,道長肛鹏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任恩沛,我火速辦了婚禮在扰,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘雷客。我一直安慰自己芒珠,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布搅裙。 她就那樣靜靜地躺著皱卓,像睡著了一般。 火紅的嫁衣襯著肌膚如雪部逮。 梳的紋絲不亂的頭發(fā)上娜汁,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天,我揣著相機(jī)與錄音兄朋,去河邊找鬼掐禁。 笑死,一個胖子當(dāng)著我的面吹牛颅和,可吹牛的內(nèi)容都是我干的傅事。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼峡扩,長吁一口氣:“原來是場噩夢啊……” “哼享完!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起有额,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤般又,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后巍佑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體茴迁,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年萤衰,在試婚紗的時候發(fā)現(xiàn)自己被綠了堕义。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖倦卖,靈堂內(nèi)的尸體忽然破棺而出洒擦,到底是詐尸還是另有隱情,我是刑警寧澤怕膛,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布熟嫩,位于F島的核電站,受9級特大地震影響褐捻,放射性物質(zhì)發(fā)生泄漏掸茅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一柠逞、第九天 我趴在偏房一處隱蔽的房頂上張望昧狮。 院中可真熱鬧,春花似錦板壮、人聲如沸逗鸣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽撒璧。三九已至,卻和暖如春茬底,著一層夾襖步出監(jiān)牢的瞬間沪悲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工阱表, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留殿如,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓最爬,卻偏偏與公主長得像涉馁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子爱致,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔烤送,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 2,739評論 2 9
  • python操作mysql實(shí)例: 1糠悯,創(chuàng)建數(shù)據(jù)庫鏈接:建立通道帮坚,保持連接,就像http三次握手建立通道互艾。 2试和,游標(biāo)...
    權(quán)艷霞閱讀 260評論 0 0
  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL纫普、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,461評論 0 4
  • 每到年末回想起這一年我所做的事情我會發(fā)現(xiàn)我很多的東西都沒有做好阅悍,會感到 迷茫 但是如果從大的環(huán)境上來看我之所以迷茫...
    深藍(lán)色的火焰閱讀 267評論 1 2
  • 好久沒更文了。 在一個多小時之前,是六一节视,這個和我無關(guān)的日子拳锚。我還是期盼著有人可以想起我。早上寻行,讓室友發(fā)“兒童節(jié)快...
    西瓜萌萌JiNg閱讀 159評論 0 1