zoukankan      html  css  js  c++  java
  • Python之使用Pandas库实现MySQL数据库的读写

    转载(有添加、修改)
    作者:但盼风雨来_jc

    链接:https://www.jianshu.com/p/238a13995b2b
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    本次分享将介绍如何在Python中使用Pandas库实现MySQL数据库的读写。首先我们需要了解点ORM方面的知识

    ORM技术

      对象关系映射技术,即ORM(Object-Relational Mapping)技术,指的是把关系数据库的表结构映射到对象上,通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中。
      在Python中,最有名的ORM框架是SQLAlchemy。Java中典型的ORM中间件有:Hibernate,ibatis,speedframework。

    SQLAlchemy

      SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行

          SQLAlchemy模块提供了create_engine()函数用来初始化数据库连接,SQLAlchemy用一个字符串表示连接信息:

    '数据库类型+数据库驱动名称://用户名:口令@机器地址:端口号/数据库名'

    Pandas读写MySQL数据库

     我们需要以下三个库来实现Pandas读写MySQL数据库:

    • pandas
    • sqlalchemy
    • pymysql

      其中,pandas模块提供了read_sql_query()函数实现了对数据库的查询,to_sql()函数实现了对数据库的写入。并不需要实现新建MySQL数据表。

           sqlalchemy模块实现了与不同数据库的连接,而pymysql模块则使得Python能够操作MySQL数据库。
      我们将使用MySQL数据库中的mydb数据库以及employee表,内容如下:

          

       注意:

    • 1.根据库的文档,我们看到to_sql函数支持两类mysql引擎一个是sqlalchemy,另一个是sqlliet3.没错,在你写入库的时候,pymysql是不能用的!!!
        • mysqldb也是不能用的,你只能使用sqlalchemy或者sqlliet3!!鉴于sqllift3已经很久没有更新了,笔者这里建议使用sqlalchemy!!
    •  2.to_sql函数并不在pd之中,而是在io.sql之中,是sql脚本下的一个类!!!所以to_sql的最好写法就是:
        • pd.io.sql.to_sql(df1,tablename,con=conn,if_exists='repalce')                 qq_34685317的博客
      下面将介绍一个简单的例子来展示如何在pandas中实现对MySQL数据库的读写:
     1 import pandas as pd
     2 from sqlalchemy import create_engine
     3 # 初始化数据库连接,使用pymysql模块
     4 # MySQL的用户:root, 密码:147369, 端口:3306,数据库:test
     5 engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')
     6 # 查询语句,选出employee表中的所有数据
     7 sql = ''' select * from employee; '''
     8 # read_sql_query的两个参数: sql语句, 数据库连接
     9 df = pd.read_sql_query(sql, engine)
    10 # 输出employee表的查询结果
    11 print(df)
    12 
    13 # 新建pandas中的DataFrame, 只有id,num两列
    14 df = pd.DataFrame({'id': [1, 2, 3, 4], 'name': ['zhangsan', 'lisi', 'wangwu', 'zhuliu']})
    15 # 将新建的DataFrame储存为MySQL中的数据表,储存index列
    16 df.to_sql('mydf', engine, index=True)
    17 print('Read from and write to Mysql table successfully!')

    运行结果:

    这说明我们确实将pandas中新建的DataFrame写入到了MySQL中!

    将CSV文件写入到MySQL中

    以上的例子实现了使用Pandas库实现MySQL数据库的读写,我们将再介绍一个实例:将CSV文件写入到MySQL中,示例的example.csv文件如下

    示例的Python代码如下:

     1 # -*- coding: utf-8 -*-
     2 
     3 # 导入必要模块
     4 import pandas as pd
     5 from sqlalchemy import create_engine
     6 
     7 # 初始化数据库连接,使用pymysql模块
     8 db_info = {'user': 'root',
     9            'password': '123456',
    10            'host': 'localhost',
    11            'port': 3306,
    12            'database': 'test'
    13            }
    14 
    15 engine = create_engine('mysql+pymysql://%(user)s:%(password)s@%(host)s:%(port)d/%(database)s?charset=utf8' % db_info, encoding='utf-8')
    16 # 直接使用下一种形式也可以
    17 # engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')
    18 
    19 # 读取本地CSV文件
    20 df = pd.read_csv("C:/Users/fuqia/Desktop/example.csv", sep=',')
    21 print(df)
    22 # 将新建的DataFrame储存为MySQL中的数据表,不储存index列(index=False)
    23 # if_exists:
    24 # 1.fail:如果表存在,啥也不做
    25 # 2.replace:如果表存在,删了表,再建立一个新表,把数据插入
    26 # 3.append:如果表存在,把数据插入,如果表不存在创建一个表!!
    27 pd.io.sql.to_sql(df, 'example', con=engine, index=False, if_exists='replace')
    28 # df.to_sql('example', con=engine,  if_exists='replace')这种形式也可以
    29 print("Write to MySQL successfully!")

    在MySQL中查看example表格

     补充:engine.execute(sql)可以直接执行sql语句:

    1 from sqlalchemy import create_engine
    2 
    3 
    4 engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')
    5 sql = "DROP TABLE IF EXISTS example"
    6 engine.execute(sql)

    如果用pymysql,则必须用cursor,读者可以对比一下。

    1 import pymysql
    2 from sqlalchemy import create_engine
    3 
    4 conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='test')
    5 # engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')
    6 sql = "DROP TABLE IF EXISTS test_input"
    7 cursor = conn.cursor()
    8 cursor.execute(sql)

    总结

    本文主要介绍了ORM技术以及SQLAlchemy模块,并且展示了两个Python程序的实例,介绍了如何使用Pandas库实现MySQL数据库的读写。

    程序本身并不难,关键在于多多练习

  • 相关阅读:
    Java+7入门经典 -1 简介
    优化算法动画演示Alec Radford's animations for optimization algorithms
    如何写科技论文How to write a technical paper
    开始学习深度学习和循环神经网络Some starting points for deep learning and RNNs
    用500行Julia代码开始深度学习之旅 Beginning deep learning with 500 lines of Julia
    用10张图来看机器学习Machine learning in 10 pictures
    ICLR 2013 International Conference on Learning Representations深度学习论文papers
    ICLR 2014 International Conference on Learning Representations深度学习论文papers
    卷积神经网络CNN(Convolutional Neural Networks)没有原理只有实现
    卷积神经网络Convolutional Neural Networks
  • 原文地址:https://www.cnblogs.com/fuqia/p/8996033.html
Copyright © 2011-2022 走看看