读取或存储DataFrames的数据到mysql中

如何把DataFrames数据存入数据库中,以MySQL为例进行说明

保存DataFrames到数据库

1. 创建数据库连接
import pymysql
from sqlalchemy import create_engine
# 创建数据库连接
engine = create_engine('mysql+pymysql://username:password@host:port/database')

username是数据库用户名,password是数据库密码,host是数据库主机名,本地即为localhostport是数据库端口号(默认为3306),database是要连接的数据库名。

2. 获取数据库连接对象
engine = create_engine(db_connection_string)
3. 将DataFrames信息写入数据库中

使用to_sql() 将数据写入到关系型数据库中的表中。

# 要写入的数据
data = pd.DataFrame({'col1': [1, 2, 3], 'col2': ['A', 'B', 'C']})
data.to_sql("data", engine, if_exists='append', index=False)
print('写入成功')

to_sql() 语法如下:

DataFrame.to_sql(name, con, schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None, method=None)

参数说明:

name:要写入的目标表名。
con:已经创建好的数据库连接对象,可以是 SQLAlchemy 的引擎对象或数据库连接字符串。
schema:可选参数,要写入的目标表所属的数据库模式(schema)。
if_exists可选参数,指定写入时的行为。可选值包括 ‘fail’(默认,如果表已存在则抛出异常)‘replace’(如果表已存在则替换)‘append’(如果表已存在则追加)
index:可选参数,指定是否将 DataFrame 的索引写入到数据库表中,默认为 True。
index_label:可选参数,指定索引列的列名,默认为 None。
chunksize:可选参数,指定分批写入的大小。如果指定了该参数,将按照指定的大小将数据分批写入数据库,有助于处理大量数据。
dtype:可选参数,指定要写入的列的数据类型。它可以是字典、numpy.dtype 对象或 SQLAlchemy 的 TypeEngine 对象。
method:可选参数,指定写入数据的方法。可选值包括 ‘multi’(默认,使用多个插入语句)或 ‘single’(使用单个大插入语句)。

注意:

如果设置if_exists='replace',那么所执行的逻辑为:将数据库中已存在的表删除,并创建一个新的表。在实际项目环境中,是无法随意进行删库 操作的,所以推荐使用if_exists='append',如果需要多次执行,在每次写入数据前,先将该表中所有数据进行删除,再重新写入。

4.关闭连接对象
# 关闭连接对象
engine.dispose()

在完成数据库操作后,需要调用 engine.dispose() 来关闭数据库连接

完整代码

import pymysql
from sqlalchemy import create_engine
# 创建数据库连接
engine = create_engine('mysql+pymysql://username:password@host:port/database')
# 定义一个函数写入数据中
def data_to_sql():
    # 获取数据库连接对象
    engine = create_engine(db_connection_string)

    # 获取数据
    period = find_data()
    period.to_sql("data", con=engine, if_exists='append', index=False)
    print('写入成功')

    # 关闭连接对象
    engine.dispose()

从数据库获取数据

# 从数据库中拿数据
def get_data(start, end):
    # 从缓存数据库中获取调拨数据
    # 创建数据库连接
    # 获取数据库连接对象
    conn = create_engine(db_connection_string)
	# 使用参数绑定日期格式在 SQL 查询中选择指定日期范围内的数据
    sql = "SELECT period  FROM `order_period` WHERE txdate BETWEEN {} AND {};"
    .format(start, end)

    # 使用 Pandas 的 read_sql 函数分块读取数据到 DataFrame 中
    chunks = pd.read_sql(sql, conn)

    # 关闭数据库连接
    conn.dispose()

    return chunks

在读取数据时,使用startend两个参数绑定日期范围,在 SQL 查询中选择指定日期范围内的数据。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值