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

前言
最近学了一下sql,因为做数据分析不会sql真不行。
平时学的都是python,所以如果要用pandas做数据分析,数据除了导入excel和csv文件,
应该还要会从数据库中导入数据到python中,于是我进行了以下的学习和探索。
环境
python 3.x
ide : juyter notebook
安装必要的模块
进入:
http://lfd.uci.edu/~gohlke/pythonlibs/#mysqlclient
找到适合自己的版本
下载到本地(我的下载到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 mysqldbtry: 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 mysqldbclass 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 mysqldbclass 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.connmit(),这个叫提交,如果不写这句,就无法将所做修改保存的数据库中
加上这个之后(加在以下两句之间):
可以看到,数据成功写入数据库了~
如果运行代码报错,很可能是你的数据库名和数据库登录密码没有修改~
文中如有错误和叙述不妥之处,望指正。