Python_操作mysql,实现基础增删改查

关于第四节课,Python操作MYSQL的学习和应用实践作业。

内容大纲:
——主要为简单的数据增删改查。
1.定义类,创建数据库链接方法、operateOne/insertMore/selectOne/selectAll方法、数据库关闭方法。
2.定义表中插入单条/多条数据(实例化类,调用insertMore/operateOne)
3.定义表中删除单条/多条数据(实例化类,调用operateOne)
4.定义表中修改单条/多条数据(实例化类,调用operateOne)
5.定义表中查询单条/多条数据(实例化类,调用selectOne/selectAll)

加个课程地址方便自己回顾:
https://m.qlchat.com/live/channel/channelPage/840000174025863.htm

代码如下
python3.5环境,pycharm编辑器

  • 定义类,创建数据库链接方法、operateOne/insertMore/selectOne/selectAll方法、数据库关闭方法。
#-*-coding:utf-8-*-

import pymysql, logging, os, time

class OperationDb_interface(object):
    # 创建数据库链接、创建游标
    def __init__(self, host, user, passwd, db, port, charset='utf8'):
        # 创建数据库链接
        self.conn = pymysql.connect(
                                    host= host,
                                    user= user,
                                    passwd= passwd,
                                    db='yui_test',
                                    port=3306,
                                    charset = charset)
        self.cur = self.conn.cursor() # 创建一个游标

    # 定义单条数据操作,增删改
    def operateOne(self, sql):
        try:
            self.cur.execute(sql) # 在游标下执行sql语句
            self.conn.commit() # 提交到数据库
            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)
            # 保存在当前.py文件所在目录下
            filedate = time.strftime("%Y%m%d%H:%M:%S_", time.localtime()).replace(':','')  # 获取当前日期和时间,文件名不能包含冒号":",去除冒号
            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

    # 定义表中插入多条数据
    def insertMore(self, condition, args):
        try:
            self.cur.executemany(condition, args) # 在游标下插入多条数据
            self.conn.commit()
            return True
            # print("Successfully insert more data!")
        except pymysql.Error as e:
            results = "SQL10001" #数据库执行错误
            print("Mysql Error %d: %s" % (e.args[0], e.args[1]))
            # print("error_info: %s" %e)
            # 保存在当前.py文件所在目录下
            filedate = time.strftime("%Y%m%d%H:%M:%S_", time.localtime()).replace(':','')  # 获取当前日期和时间,文件名不能包含冒号":",去除冒号
            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

    # 查询表中单条数据
    def selectOne(self, condition):
        try:
            self.cur.execute(condition) # 在游标下获取一条数据
            results = self.cur.fetchone() # 获取一条结果
        except pymysql.Error as e:
            results = "SQL10001"  # 数据库执行错误
            print("Mysql Error %d: %s" % (e.args[0], e.args[1]))
            # print("error_info: %s" %e)
            # 保存在当前.py文件所在目录下
            filedate = time.strftime("%Y%m%d%H:%M:%S_", time.localtime()).replace(':', '')  # 获取当前日期和时间,文件名不能包含冒号":",去除冒号
            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

    # 查询表中多条数据
    def selectAll(self, condition):
        try:
            self.cur.execute(condition) # 在游标下执行语句
            self.cur.scroll(0, mode='absolute') # 光标回到初始位置
            results = self.cur.fetchall() # 返回游标中所有结果
        except pymysql.Error as e:
            results = "SQL10001"  # 数据库执行错误
            print("Mysql Error %d: %s" % (e.args[0], e.args[1]))
            # print("error_info: %s" %e)
            # 保存在当前.py文件所在目录下
            filedate = time.strftime("%Y%m%d%H:%M:%S_", time.localtime()).replace(':', '')  # 获取当前日期和时间,文件名不能包含冒号":",去除冒号
            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

    # 数据库关闭
    def __del__(self):
        if self.cur != None:
            self.cur.close() # 关闭游标链接
        if self.conn != None:
            self.conn.close() # 关闭数据库链接
        # 会在下面的print执行完后自动执行


  • 实例化类,调用方法
# SQL Connection Config
host = 'localhost'
user = 'root'
passwd = 'root'
db = 'yui_test'
port = 3306

if __name__ == "__main__":

    # 实例化类
    test = OperationDb_interface(host, user, passwd, db, port)

    # 1.1定义表中插入单条数据
    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定义表中插入多条数据
    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定义表中删除单条数据
    delOne_sql = "delete from yui_user where name ='Mike';"
    delOne_result = test.operateOne(delOne_sql)


    # 2.2定义表中删除多条数据
    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定义表中更新单条数据
    updateOne_sql = "update yui_user set dept = '财务部' where name = 'Mike';"
    updateOne_result = test.operateOne(updateOne_sql)
    print(updateOne_result)


    # 3.2定义表中更新多条数据
    data = {
        'Sherry':'技术部',
        'Mike':'财务部',
        'Sunday':'技术部'
    }
    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查询表中单条数据
    selectOne_sql = "select * from yui_user where dept = '财务部';"
    selectOne_result = test.selectOne(selectOne_sql)
    print(selectOne_result)

    # 4.2查询表中多条数据
    # 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))

在实践过程中其实碰到很多很多小问题,由于没有代码基础还会犯很多基础性编程错误和理解错误。之后希望能把遇到的坑也补充写起来。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,718评论 2 9
  • python操作mysql实例: 1,创建数据库链接:建立通道,保持连接,就像http三次握手建立通道。 2,游标...
    权艳霞阅读 255评论 0 0
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,422评论 0 4
  • 每到年末回想起这一年我所做的事情我会发现我很多的东西都没有做好,会感到 迷茫 但是如果从大的环境上来看我之所以迷茫...
    深蓝色的火焰阅读 264评论 1 2
  • 好久没更文了。 在一个多小时之前,是六一,这个和我无关的日子。我还是期盼着有人可以想起我。早上,让室友发“儿童节快...
    西瓜萌萌JiNg阅读 158评论 0 1