前言

最近学了一下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(),这个叫提交,如果不写这句,就无法将所做修改保存的数据库中

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

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

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

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

python和数据库_python与数据库操作相关推荐

  1. python建立资料库_python 建立数据库

    书籍:python数据科学傻瓜书 Python for Data Science For Dummies 2nd Edition - 2019 简介 学习Python编程和统计数据的快捷方法 Pyth ...

  2. 绘制图形可以使用什么python数据库_python 读取数据库并绘图的实例

    python 读取数据库并绘图的实例 1.安装相应的库文件 sudo apt-get install python-mysqldb 2.数据库操作 import MySQLdb db = MySQLd ...

  3. python连接es数据库_Python Elasticsearch API操作ES集群

    环境Centos 7.4 Python 2.7 Pip 2.7 MySQL-python 1.2.5 Elasticsearc 6.3.1 Elasitcsearch6.3.2 知识点调用Python ...

  4. 怎么用python写数据库_Python实现数据库编程方法详解

    本文实例讲述了Python实现数据库编程方法.分享给大家供大家参考.具体分析如下: 用PYTHON语言进行数据库编程, 至少有六种方法可供采用. 我在实际项目中采用,不但功能强大,而且方便快捷.以下是 ...

  5. python加数据库_python向数据库添加数据(添加一条数据)

    原博文 2020-03-18 22:44 − 前置准备条件 1.cmd命令 下载第三方模块 2.连接数据库 3.创建数据库和表 在做一下操作 源码: #引入模块import pymysql# 链接数据 ...

  6. python 写入数据库_python 写入数据库

    Python学习(22)--文件操作1 Python学习(22)--文件操作1 之前我们介绍到的数据类型,如列表,字典或者一个数字,字符等等.都是在程序运行时存储在内存中的,存储在内存中的数据不稳定, ...

  7. python 中文查找_python 查找数据库

    django.db.utils.ProgrammingError: 1146 的解决办法 在models中设置完数据库相关的东西后执行命令 python manage.py makemigration ...

  8. python是否可以建立数据库_python新建数据库

    python34之殇--DJango连接Mysql数据库 系统环境: 64位 windows 7 + python34 + Django 1.8 问题描述: 因为MySQLdb不兼容python3.x ...

  9. python 测试mysql数据库_Python MySQL 数据库之测试索引

    一. 测试索引 一 准备 数据库准备: #1. 准备表 create table s1( id int, name varchar(20), gender char(6), email varchar ...

最新文章

  1. nginx 部署antd_design_pro
  2. CentOS搭建本地光盘YUM源
  3. Linux 卸载旧版本的 JDK 并且升级新的JDK 【转】
  4. Windows服务器补丁列表及介绍_传奇单机架设,列表读取失败?单机架设经常遇到的问题分享!...
  5. python 链表的基础概念和基础用法
  6. 【转载】BTEs业务交易事件初识
  7. 【Nginx】应用静态化配置
  8. 删除本地git的远程分支和远程删除git服务器的分支
  9. 阿里云主机(aliyun-Linux) x64安装Redis详解
  10. dispatch_group_t
  11. 3D动画设计软件:Cinema 4D R25 for mac(c4d r25)
  12. 机械优化设计进退法c语言程序,机械优化设计powell法程序
  13. jio tomcat_透过Jio Glass看
  14. linux下隐藏tomcat版本号
  15. Matlab读取显示图像顺序
  16. pgadmin3连接mysql_postgresql – pgAdmin III:拒绝访问数据库
  17. 生如夏花之绚烂,死如秋叶之静美---也传奇
  18. 共议新时代的文化自信与守正创新,第十四届文化中国讲坛举办
  19. CPU(AMD)2020.10购买推荐
  20. 如何快速掌握 Python 数据采集与网络爬虫技术

热门文章

  1. c++ primer随笔
  2. 浅谈CDQ分治与偏序问题
  3. net.sz.framework 框架 ORM 消消乐超过亿条数据排行榜分析 天王盖地虎
  4. PHP修改表格(增删改)
  5. Lazarus 1.6 增加了新的窗体编辑器——Sparta_DockedFormEditor.ipk
  6. (转载)在IAR及MDK里生成hex及bin文件的标准方法
  7. 我的conky 配置(拆分版)
  8. [转]如何让虚拟目录里面的webconfig不继承网站
  9. undefined reference to `dlclose‘问题解决方法
  10. 解决使用elementUI框架el-upload上传组件时session丢失问题