Python操作mysql数据库

往mysql写数据一段时间了,但一直没写篇博客记录,所以今日特地补上一篇。

(以下操作的前提是你已配好了python环境及安装了mysql数据库)

python版本: 2.7

模块安装: pip install  pymysql

前言:考虑到现在python3.x已经不支持MySQLdb了,所以本次采用pymysql讲解,使用python3.x的看官改下语法就行。

首先,说下操作步骤。

1.建个测试表,表名为test,如下图所示(找个mysql的可视化软件,操作方便些,如 Navicat for MySQL)



2.敲代码...


步骤说完,接下来...啥?这就完了?对,就是这么简单。

接下来说说新手要注意的‘’,这才是重头戏!

1)表中中文老是显示乱码怎么办?别慌,看下图->


2)增删改查都试了,数据还是没变化,这....快哭了

   少年,你的 xx.commit()掉了,切记,不提交都是徒劳。

3)往表中插入多条数据,好好的中文怎么就变成了'\x23\2423\123\...'这是什么鬼...

  莫怕,你可以这样写:

  sql = 'insert into test values(' +str(ids[i]) + ',"' + names[i] + '",' + str(ages[i]) + ',"' + sex[i] + '"'')'

  额...,这一堆的单引号、双引号是个什么玩意?才两个字符串就这样,多了还不直接晕掉?换个行不行?

  当然可以!

  其实你可以这样写: sql = 'insert into test values({},"{}",{},"{}")'.format(ids[i], names[i], ages[i], sexs[i])

    注: {}相当于一个容器,放整数、小数、字符串都行,不过放字符串的时候要加上"",变成这样->"{}"

  或者这样写: sql = 'insert into test values(%d,"%s",%d,"%s")' % (ids[i], names[i], ages[i], sexs[i])

    注:%d表示整型,%s表示字符串,放字符串的地方也要加"",即变成 "%s"

4)查询得到结果集后,用fetchone()得到一条数据,然后迫不及待地打印输出,结果....


   我的中文又没了...

   同学,请'脚踏实地'的循环输出...

到此,大坑就基本说完了,下面直接上'菜',各位慢慢品尝...

# coding=UTF-8
import pymysql
#插入数据
def testInsert(Cursor):
    try:
        # test后无具体字段,表示添加全部字段,等价于test(id,name,age,sex),()中为全部字段名
        # sql = 'insert into test values(2,"小明",19,"男")' #添加单条记录
        # 非添加所有字段时,要将所有添加字段名写上
        #sql = 'insert into test(id,name,age) values(3,"小虎",17)'
        # 添加多条记录方法
        ids = [1, 2, 3, 4]
        names = ['小白', '小黄', '小花', '小草']
        ages = [12, 13, 14, 15]
        sexs = ['男', '男', '女', '女']
        for i in range(4):
            # sql = 'insert into test values(' + str(ids[i]) + ',"' + names[i] + '",' + str(ages[i]) + ',"' + sexs[i] + '"'')'
            # sql = 'insert into test values({},"{}",{},"{}")'.format(ids[i], names[i], ages[i], sexs[i])
            sql = 'insert into test values(%d,"%s",%d,"%s")' % (ids[i], names[i], ages[i], sexs[i])
            print sql
            Cursor.execute(sql)
            print '添加成功'
    except Exception, e:
        print '添加失败', e

#删除数据
def testDelete(Cursor, id): 
    try:
        # sql = 'delete from test where id=4' #给定id具体值
        sql = 'delete from test where id =%d' % id  # id值由外面传入
        Cursor.execute(sql)
        print '删除成功'
    except Exception, e:
        print '发生异常:', e

#修改数据
def testUpdate(Cursor, name, id): 
    try:
        sql = 'update test set name="更改",age=3,sex="未知" where id=2'  # 直接给值
        sql = 'update test set name="{}" where id={}'.format(name, id)  # 由外部传值
        Cursor.execute(sql)
        print '修改成功'
    except Exception, e:
        print '发生异常:', e

#查询数据
def testSelect(cursor, id):
    try:
        # sql = 'select * from test where id=2'  # 查询单条记录,直接给值
        # sql = 'select * from test where id=%d' % id  # 查询单条记录,外部传值
        sql = 'select * from test'  # 查询所有记录
        cursor.execute(sql)
#         data = cursor.fetchone()  # 从结果集中取得单条数据
#         print type(data)  # 验证返回类型
#         for d in data:
#             print d,

        data = cursor.fetchall()  # 获取结果集的所有数据
        print type(data)  # 验证返回类型
        for r in data:  # 先取得每条记录的元组对象
            for d in r:
                print d,
            print

        # 在con.cursor()中加上参数 MySQLdb.cursors.DictCursor后,查询返回一个字典对象,可通过字段名取值
#         data = cursor.fetchall()
#         print type(data)  # 验证返回类型
#         print '按字段名取值测试成功:'
#         for d in data:
#             print 'id:', d['id'], 'name:', d['name'], 'age:', d['age'], 'sex:',d['sex']
    except Exception, e:
        print '发生异常:', e

#获取记录数
def testCounts(cursor):
    try:
        sql = 'select count(*) from test'
        cursor.execute(sql)
        length = cursor.fetchone()
        print'共有:', length[0], '条记录'
    except Exception, e:
        print '发生异常', e


if __name__ == '__main__':
    try:
        con = pymysql.connect('localhost', '你的mysql用户名', '密码', '要连接的数据库', charset='utf8')
        # 加入编码,防止表中乱码,切记,是 utf8 !!!不是utf-8!
        cursor = con.cursor()  #创建操作游标,无参数时查询方法返回一个元组对象
        # cursor = con.cursor(MySQLdb.cursors.DictCursor)  # 加上该参数后,查询方法返回一个字典对象
        # testInsert(cursor)  # 测试插入方法
        # testDelete(cursor, 1)  # 测试删除方法
        # testUpdate(cursor, '我又改名了', 2)  # 测试修改方法
        testSelect(cursor, 2)  # 测试查询方法
        testCounts(cursor)  # 测试获取记录数方法
        con.commit()  # 记得提交,不然没有效果
    except Exception, e:
        print '连接数据库失败', e
        con.rollback()  # 错误时回滚
    finally:
        cursor.close()
        con.close()  # 关闭数据库连接

运行图就放这两张做代表了,有兴趣的可以粘贴下来慢慢‘玩’。不过连接那里记得改哈大笑

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭