本篇文章主要基于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数据库中相关推荐

  1. 将labview连续数据保存到mysql数据库器

    这一篇是在之前完成Labview和mysql连接,并且进行了简单的CRUD删除的基础上来的.我们一般不会拿Labview来做学生这种数据管理系统,而是对于基本传感器数据的采集和保存,而传感器采集数据会 ...

  2. mysql打印语句_大数据挖掘—(八):scrapy爬取数据保存到MySql数据库

    (大数据挖掘-(七):读懂MySql数据库操作)(大数据挖掘神器--scrapy spider爬虫框架(五):解析多层网页) 通过往期的文章分享,我们了解了如何爬取想要的数据到Items中,也了解了如 ...

  3. Pandas的学习(读取mongodb数据库集合到DataFrame,将DataFrame类型数据保存到mongodb数据库中)

    1.读取mongodb数据库集合到DataFrame import pymongo import pandas as pdclient = pymongo.MongoClient("数据库连 ...

  4. python hive mysql_[7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - 摩西莫西 - ITeye技术网站...

    编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) 很多情况下,需要将Hive中的运算结果保存到MySQL数据库中,可以通过简单的Python脚本来实现. 例子1:如果获取Hive ...

  5. [7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - 摩西莫西 - ITeye技术网站...

    [7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - 摩西莫西 - ITeye技术网站 [7] 编写Python脚本将Hive的运算结果保存到MySQL数据库中(1) - ...

  6. 将MQTT收到的数据保存到MySQL数据库

    陈拓 2021/04/17-2021/04/19 1. 概述 在<用C语言实现mosquitto MQTT订阅消息> https://zhuanlan.zhihu.com/p/365190 ...

  7. session mysql java_PHP自定义session处理方法,保存到MySQL数据库中

    我们都知道,session是为了解决因特网的无状态属性而创造出来的.我们可以用session这种会话管理机制来构建购物车.监控站点网络访问,甚至还可以跟踪某一个用户具体是如何使用你的应用的.PHP默认 ...

  8. python爬取淘宝搜索页面+url+图片下载并将信息保存到MySQL数据库中

    人狠话不多,直接上代码,都有详细注释,不多解释 需要安装的包: pymysql,用于连接mysql数据库 urllib,爬虫必备包,urllib3也可以 # encoding:utf-8 import ...

  9. python读取串口数据保存到mysql数据库_Python3读取Excel数据存入MySQL的方法

    Python是数据分析的强大利器. 利用Python做数据分析,第一步就是学习如何读取日常工作中产生各种excel报表并存入数据中,方便后续数据处理. 这里向大家分享python3如何使用xlrd读取 ...

最新文章

  1. 不平等加剧与问责机制:纽约大学AI Now研究所2018 AI现状报告 | 报告
  2. 利用select实现年月日三级联动的日期选择效果
  3. 单例设计模式-反射攻击解决方案及原理分析
  4. DFS实现floodfill算法
  5. raspberry pi_使用Raspberry Pi和GPIO引脚控制外部LED
  6. 为避免攻击,研究员把严重的比特币漏洞详情焐了两年
  7. 查询mysql当前连接并删除_查看mysql已有用户并删除
  8. 计算机安装系统说明,电脑操作系统安装方法-详细图解说明-简单安装Windows系统...
  9. Typora如何设置字体的颜色
  10. 线性回归(线性拟合)与非线性回归(非线性拟合)原理、推导与算法实现(一)
  11. php中fastcgi和php-fpm是什么
  12. STM32L476+STM32cubeMx+Freemodbus移植记录
  13. 瑞典皇家理工学院计算机科学世界排名,瑞典皇家理工学院世界排名
  14. Flex布局(弹性布局)-图文介绍
  15. 莫队算法学习笔记(一)——普通莫队
  16. pmic输出电压设置+pinctrl子系统+平台驱动demo例程
  17. python填充图像为方形
  18. pytorch中Parameter()介绍
  19. ZYNQ裸机LWIP双网口实现
  20. 数据和特征决定了机器学习的上限,而模型和算法只是逼近这个上限而已

热门文章

  1. 进化算法_遗传算法相关资料
  2. CVPR 2022|MPViT:用于密集预测的多路径视觉Transformer
  3. 如何使用 BERT 进行自然语言处理?
  4. 清华本硕男,月入5W征婚引群嘲“普通却自信”,本人终于回应了!
  5. 让人脸识别算法失灵,还能抵抗微信微博照片压缩!武大Adobe提出抗压缩对抗新框架,成功率最高超90%...
  6. 如何用Python玩转比特币?(附源码)
  7. 教育部:禁止开学前网授新学期课程
  8. 宋仲基宋慧乔没能找到对的人,算法能帮我们找到么?
  9. 赫夫曼树(哈夫曼树)
  10. 如何在 Python 中开始机器学习?(小白必看)