Python操作Mysql数据库入门——查看和增加记录

Python操作Mysql数据库入门——查看和增加记录

作者:王大伟 Python爱好者社区唯一小编,请勿转载,谢谢。
出处:Python操作Mysql数据库入门——查看和增加记录

小编配套免费视频教程:Hellobi Live | 破冰入门Python 课程内容:1、Anaconda安装2、jupyter常用操作3、Python基本数据类型4、Python基本运算和表达式5、Python程序基本控制流程(顺序,分支,循环)6、Python特色数据类型(列表,元组,字典,集合)7、Python函数8、Python模块导入使用之time、random模块9、Python异常处理10、Python文件操作 11、Python后续学习提升方向和建议

公众号:Python爱好者社区(微信ID:python_shequ),关注,查看更多连载内容

前言

最近学了一下sql,因为做数据分析不会sql真不行。

平时学的都是Python,所以如果要用pandas做数据分析,数据除了导入excel和csv文件,

应该还要会从数据库中导入数据到Python中,于是我进行了以下的学习和探索。


环境

Python 3.X

IDE : juyter notebook


安装必要的模块

进入:

lfd.uci.edu/~gohlke/pyt



找到适合自己的版本

下载到本地(我的下载到e:盘根目录)

然后打开cmd如下图安装



这里推荐本地安装


使用Python连接数据库

import MySQLdb



如果导入模块没报错,恭喜你,安装模块成功了!


conn = MySQLdb.connect(
    host = '127.0.0.1',#本地地址
    user = 'root',#一般默认用户名
    passwd = '********',#本地数据库登录密码
    db = 'test',#数据库名称
    port = 3306,#安装mysql默认的端口号
    charset = 'utf8'#设置数据库统一编码
)

通过connect方法连接本地mysql数据库,这里要注意你要修改的或许是登录密码和数据库名称


创建游标

首先,我们要创建一个游标

cursor = conn.cursor()

什么是游标呢?

游标就相当于一个缓冲区,存放暂时的结果(这是我的理解)

就像去超市买买买,你可能要推一个手推车,这里的手推车就像游标,推着手推车去对应的货架完成挑选操作,而手推车最终会在出超市时候清空

观察数据库



我本地的数据库test中有个tdb_goods的表

表的内容如上图所示

有商品的id,名称,种类id,品牌id,是否在售和是否下架几个字段

一共有23条记录

获取数据

我们使用select语句可以获取数据

cursor.execute('SELECT * FROM `tdb_goods`;')
data = cursor.fetchone()#取一条数据
print(data)

首先我们用游标的execute方法执行一句sql语句获取tdb_goods中的所有数据

然后使用游标的fetchone方法取出其中一条记录并且展现出来



如上图,我们取出的数据是元组形式

当然,我们应该养成打开后关闭的好习惯,所以,在操作结束,应该断开与数据库的连接

conn.close()

异常处理

当我们在操作时,希望和在mysql数据库中一样,异常时会提示异常信息

那么我们就要加入异常处理模块

try:
    conn = MySQLdb.connect(
        host = '127.0.0.2222',
        user = 'root',
        passwd = '********',
        db = 'test',
        port = 3306,
        charset = 'utf8'
    )
except MySQLdb.Error as e:
    print('Error:%s' % e)



这里异常时,就将异常的信息告知我们了


我们将以上代码整理一下:

import MySQLdb

try:
    conn = MySQLdb.connect(
        host = '127.0.0.1',
        user = 'root',
        passwd = '********',
        db = 'test',
        port = 3306,
        charset = 'utf8'
    )
    
    cursor = conn.cursor()
    cursor.execute('SELECT * FROM `tdb_goods`;')
    data = cursor.fetchone()
    print(data)
    
    conn.close()

except MySQLdb.Error as e:
    print('Error:%s' % e)



当我们将fetchone改成fetchall时候,就是取出所有信息了



使用面向对象编程

如果你熟悉面向对象编程或者看过我写的面向对象编程入门系列(小姐姐系列)

传送门:

Python面向对象编程从零开始(1)——从没对象到有对象

Python面向对象编程从零开始(2)—— 与对象相互了解


Python面向对象编程从零开始(3)—— 小姐姐请客上篇

Python面向对象编程从零开始(4)—— 小姐姐请客下篇

Python面向对象编程从零开始(5)—— 小姐姐要买房

如果你还没接触过面向对象编程,看完以上5篇至少对接下来的内容理解上不存在问题

import MySQLdb

class Mysql(object):
    
    def __init__(self):
        self.connect()
    
    def connect(self):

        try:
            self.conn = MySQLdb.connect(
                host = '127.0.0.1',
                user = 'root',
                passwd = '********',
                db = 'test',
                port = 3306,
                charset = 'utf8'
            )
            
        except MySQLdb.Error as e:
            print('Error:%s' % e)

    def close_conn(self):
        try:
            if self.conn:
                self.conn.close()
        except MySQLdb.Error as e:
            print('Error:%s' % e)     
        
    def get_a(self):
   
        sql = 'select * from `tdb_goods` where `cate_id` = %s;' 
        cursor = self.conn.cursor()
        cursor.execute(sql,('1',))
        data = cursor.fetchone()
        print(data)
        cursor.close()
        self.close_conn()
        
def main():
    object = Mysql()
    object.get_a()
    
if __name__ == '__main__':
    main()

注:这里定义了一个类叫Mysql,然后用类创建一个对象名为object,在创建对象的时候,类的初始化时调用连接数据库函数

创建了一个叫object的对象,使用对象的get_a方法从数据库tdb_goods中选出cate_id=1的一条记录,在get_a函数最后位置断开数据库连接

结果如下:



插入记录到数据库

import MySQLdb

class Mysql(object):
    
    def __init__(self):
        self.connect()
    
    def connect(self):

        try:
            self.conn = MySQLdb.connect(
                host = '127.0.0.1',
                user = 'root',
                passwd = '********',
                db = 'test',
                port = 3306,
                charset = 'utf8'
            )
            
        except MySQLdb.Error as e:
            print('Error:%s' % e)

    def close_conn(self):
        try:
            if self.conn:
                self.conn.close()
        except MySQLdb.Error as e:
            print('Error:%s' % e)     
        
    def get_a(self):
   
        sql = 'select * from `tdb_goods` where `cate_id` = %s;' 
        cursor = self.conn.cursor()
        cursor.execute(sql,('1',))
        data = cursor.fetchone()
        print(data)
        cursor.close()
        self.close_conn()
    
    def add_a(self):
        sql = "insert into `tdb_goods`(`goods_name`,`cate_id`,`brand_id`,`goods_price`,`is_show`,`is_saleoff`) value (%s,%s,%s,%s,%s,%s);"
        cursor = self.conn.cursor()
        cursor.execute(sql,('伟哥牌notebook','8','1','66666','1','0'))
        cursor.close()
        self.close_conn()
        
def main():
    object = Mysql()
    object.add_a()
    
if __name__ == '__main__':
    main()

注:这里,将一条记录插入了数据库,但是当我执行完这条语句(没报错)

刷新数据库并没有新增一条记录


划重点:在这里,有一个self.conn.commit(),这个叫提交,如果不写这句,就无法将所做修改保存的数据库中

加上这个之后(加在以下两句之间):







可以看到,数据成功写入数据库了~

如果运行代码报错,很可能是你的数据库名和数据库登录密码没有修改~

文中如有错误和叙述不妥之处,望指正。

编辑于 2017-12-29

文章被以下专栏收录