感谢关注天善智能,走好数据之路↑↑↑

  欢迎关注天善智能,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区,学习,问答、求职一站式搞定!

  每周2-3场免费数据领域公开课,每月线下活动,欢迎关注!

  前言

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

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

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

  环境

  Python 3.X

  IDE : juyter notebook

  安装必要的模块

  进入:

  ~gohlke/pythonlibs/#mysqlclient

  fetch mysql_fetch mysql_fetch mysql

  找到适合自己的版本

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

  然后打开cmd如下图安装

  fetch mysql_fetch mysql_fetch mysql

  这里推荐本地安装

  使用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()

  什么是游标呢?

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

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

  观察数据库

  fetch mysql_fetch mysql_fetch mysql

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

  表的内容如上图所示

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

  一共有23条记录

  获取数据

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

  cursor.execute('SELECT * FROM tdb_goods;')

  data = cursor.fetchone()#取一条数据

  print(data)

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

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

  fetch mysql_fetch mysql_fetch mysql

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

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

  

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)

  fetch mysql_fetch mysql_fetch mysql

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

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

  importMySQLdb

  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时候,就是取出所有信息了

  fetch mysql_fetch mysql_fetch mysql

  使用面向对象编程

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

  传送门:

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

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

  fetch mysql_fetch mysql_fetch mysql

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

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

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

最后修改:2024 年 08 月 03 日
如果觉得我的文章对你有用,请随意赞赏