读dataframe存入mysql_DataFrame数据保存到mysql数据库中
本篇文章主要基于python3.6与pandas实现以下数据库操作功能:
创建数据库
数据库创建表
数据库批量插入数据
数据库更新数据
数据库配置
class sqlConfig:
db_name = "test_db" # 数据库名
db_user = "root" # 用户名
db_host = "localhost" # IP地址
db_port = 3306 # 端口号
db_passwd = "1202" # 密码
数据库连
2种连接方式
通过MySQLdb连接
def sql_con(self):
# 打开数据库连接,此方法指定数据库
conn = MySQLdb.connect(
host=sqlConfig.db_host,
user=sqlConfig.db_user,
passwd=sqlConfig.db_passwd,
db=sqlConfig.db_name,
charset="utf8"
)
return conn
def sql_con_without_database_name(self):
# 打开数据库连接,不指定数据库。需要重新创建数据库的时候用这个
conn = MySQLdb.connect(
host=sqlConfig.db_host,
user=sqlConfig.db_user,
passwd=sqlConfig.db_passwd,
charset="utf8"
)
return conn
通过sqlalchemy模块
from sqlalchemy import create_engine
# 初始化数据库连接,使用pymysql模块
db_info = {
'user': sqlConfig.db_user,
'password': sqlConfig.db_passwd,
'host': sqlConfig.db_host,
'port': sqlConfig.db_port,
'database': sqlConfig.db_name
}
engine = create_engine(
'mysql+pymysql://%(user)s:%(password)s@%(host)s:%(port)d/%(database)s?charset=utf8' % db_info,
encoding='utf-8'
)
创建数据库
def create_database(self, database_name):
# 先创建连接
conn = self.sql_con_without_database_name()
cursor = conn.cursor()
create_database_str = 'CREATE DATABASE %s;' % database_name
cursor.execute(create_database_str)
# 断开连接
cursor.close()
conn.close()
创建表
def create_table(self, create_table_str):
# # mysql 创建表语言,表结构实例
# create_table_str = '''create table student(
# id int,
# name char(16),
# born_year year,
# birth date,
# class_time time,
# reg_time datetime
# );
# '''
# 先创建连接
conn = self.sql_con()
cursor = conn.cursor()
cursor.execute(create_table_str)
# 断开连接
cursor.close()
conn.close()
插入数据
此方法通过调用dataframe.to_sql函数实现,但是该功能是以表为单位进行数据追加或者替换整张表。不能实现替换数据中已存在部分、插入未存在的数据的功能。
def insert_data_by_pandas(self, dataframe, table_name, if_exists='append'):
'''
通过dataframe 向 sql 中插入表,此方法缺点是若表已存在,不能替换表中部分重复数据,只能替换/追加整张表
:param dataframe: pd.Dataframe类型
:param table_name: 插入的表名
:param if_exists: {'fail', 'replace', 'append'}, default 'fail'
- fail: If table exists, do nothing.
- replace: If table exists, drop it, recreate it, and insert data.
- append: If table exists, insert data. Create if does not exist.
:return:
'''
# 初始化数据库连接,使用pymysql模块
db_info = {
'user': sqlConfig.db_user,
'password': sqlConfig.db_passwd,
'host': sqlConfig.db_host,
'port': sqlConfig.db_port,
'database': sqlConfig.db_name
}
engine = create_engine(
'mysql+pymysql://%(user)s:%(password)s@%(host)s:%(port)d/%(database)s?charset=utf8' % db_info,
encoding='utf-8'
)
dataframe.to_sql(table_name, engine, if_exists=if_exists, index=False, chunksize=100)
此方法通过sql插入语句进行批量插入操作。
def insert_data_multi(self, dataframe, table_name):
'''
通过dataframe 向 sql 中批量插入数据
:param dataframe: pd.Dataframe类型
:param table_name: 插入的表名
:return:
'''
# 先创建连接
conn = self.sql_con()
cursor = conn.cursor()
# 获取列名和值
keys = dataframe.keys()
values = dataframe.values.tolist()
key_sql = ','.join(keys)
value_sql = ','.join(['%s'] * dataframe.shape[1])
# 插入语句
insert_data_str = """ insert into %s (%s) values (%s)""" % (table_name, key_sql, value_sql)
# 提交数据库操作
cursor.executemany(insert_data_str, values)
conn.commit()
# 断开连接
cursor.close()
conn.close()
对数据进行更新
此方法在插入数据时,若数据已存在,则替换其为新数据,否则追加到数据表中。数据表中必须存在主键或者某一字段属性为“UNIQUE”。
def update_data_multi(self, dataframe, table_name):
'''
通过dataframe 向 sql 中批量插入数据
:param dataframe: pd.Dataframe类型
:param table_name: 插入的表名
:return:
'''
# 先创建连接
conn = self.sql_con()
cursor = conn.cursor()
# 获取列名和值
keys = dataframe.keys()
values = dataframe.values.tolist()
key_sql = ','.join(keys)
value_sql = ','.join(['%s'] * dataframe.shape[1])
# 插入语句,若数据已存在则更新数据
insert_data_str = """ insert into %s (%s) values (%s) ON DUPLICATE KEY UPDATE""" % (table_name, key_sql, value_sql)
update_str = ','.join([" {key} = VALUES({key})".format(key=key) for key in keys])
insert_data_str += update_str
# 提交数据库操作
cursor.executemany(insert_data_str, values)
conn.commit()
# 断开连接
cursor.close()
conn.close()
读dataframe存入mysql_DataFrame数据保存到mysql数据库中相关推荐
- 将labview连续数据保存到mysql数据库器
这一篇是在之前完成Labview和mysql连接,并且进行了简单的CRUD删除的基础上来的.我们一般不会拿Labview来做学生这种数据管理系统,而是对于基本传感器数据的采集和保存,而传感器采集数据会 ...
- mysql打印语句_大数据挖掘—(八):scrapy爬取数据保存到MySql数据库
(大数据挖掘-(七):读懂MySql数据库操作)(大数据挖掘神器--scrapy spider爬虫框架(五):解析多层网页) 通过往期的文章分享,我们了解了如何爬取想要的数据到Items中,也了解了如 ...
- Pandas的学习(读取mongodb数据库集合到DataFrame,将DataFrame类型数据保存到mongodb数据库中)
1.读取mongodb数据库集合到DataFrame import pymongo import pandas as pdclient = pymongo.MongoClient("数据库连 ...
- python hive mysql_[7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - 摩西莫西 - ITeye技术网站...
编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) 很多情况下,需要将Hive中的运算结果保存到MySQL数据库中,可以通过简单的Python脚本来实现. 例子1:如果获取Hive ...
- [7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - 摩西莫西 - ITeye技术网站...
[7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - 摩西莫西 - ITeye技术网站 [7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - ...
- 将MQTT收到的数据保存到MySQL数据库
陈拓 2021/04/17-2021/04/19 1. 概述 在<用C语言实现mosquitto MQTT订阅消息> https://zhuanlan.zhihu.com/p/365190 ...
- session mysql java_PHP自定义session处理方法,保存到MySQL数据库中
我们都知道,session是为了解决因特网的无状态属性而创造出来的.我们可以用session这种会话管理机制来构建购物车.监控站点网络访问,甚至还可以跟踪某一个用户具体是如何使用你的应用的.PHP默认 ...
- python爬取淘宝搜索页面+url+图片下载并将信息保存到MySQL数据库中
人狠话不多,直接上代码,都有详细注释,不多解释 需要安装的包: pymysql,用于连接mysql数据库 urllib,爬虫必备包,urllib3也可以 # encoding:utf-8 import ...
- python读取串口数据保存到mysql数据库_Python3读取Excel数据存入MySQL的方法
Python是数据分析的强大利器. 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python3如何使用xlrd读取 ...
最新文章
- 不平等加剧与问责机制:纽约大学AI Now研究所2018 AI现状报告 | 报告
- 利用select实现年月日三级联动的日期选择效果
- 单例设计模式-反射攻击解决方案及原理分析
- DFS实现floodfill算法
- raspberry pi_使用Raspberry Pi和GPIO引脚控制外部LED
- 为避免攻击,研究员把严重的比特币漏洞详情焐了两年
- 查询mysql当前连接并删除_查看mysql已有用户并删除
- 计算机安装系统说明,电脑操作系统安装方法-详细图解说明-简单安装Windows系统...
- Typora如何设置字体的颜色
- 线性回归(线性拟合)与非线性回归(非线性拟合)原理、推导与算法实现(一)
- php中fastcgi和php-fpm是什么
- STM32L476+STM32cubeMx+Freemodbus移植记录
- 瑞典皇家理工学院计算机科学世界排名,瑞典皇家理工学院世界排名
- Flex布局(弹性布局)-图文介绍
- 莫队算法学习笔记(一)——普通莫队
- pmic输出电压设置+pinctrl子系统+平台驱动demo例程
- python填充图像为方形
- pytorch中Parameter()介绍
- ZYNQ裸机LWIP双网口实现
- 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已
热门文章
- 进化算法_遗传算法相关资料
- CVPR 2022|MPViT:用于密集预测的多路径视觉Transformer
- 如何使用 BERT 进行自然语言处理?
- 清华本硕男,月入5W征婚引群嘲“普通却自信”,本人终于回应了!
- 让人脸识别算法失灵,还能抵抗微信微博照片压缩!武大Adobe提出抗压缩对抗新框架,成功率最高超90%...
- 如何用Python玩转比特币?(附源码)
- 教育部:禁止开学前网授新学期课程
- 宋仲基宋慧乔没能找到对的人,算法能帮我们找到么?
- 赫夫曼树(哈夫曼树)
- 如何在 Python 中开始机器学习?(小白必看)