如何把DataFrames数据存入数据库中,以MySQL为例进行说明
保存DataFrames到数据库
1. 创建数据库连接
import pymysqlfrom sqlalchemy import create_engine# 创建数据库连接engine = create_engine('mysql+pymysql://username:password@host:port/database')
username
是数据库用户名,password
是数据库密码,host
是数据库主机名,本地即为localhost
,port
是数据库端口号(默认为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 pymysqlfrom 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
在读取数据时,使用start
和end
两个参数绑定日期范围,在 SQL 查询中选择指定日期范围内的数据。
来源地址:https://blog.csdn.net/Sherlee1213/article/details/130642392