SQLAlchemy:执行简单的SQL语句
目录
虽然 SQLAlchemy 是 ORM 框架,但也可以用来执行 SQL 语句。
本文介绍如何使用 SQLAlchemy 执行简单的 SQL 语句。
示例代码来自正在开发的项目,从单位的台风数据库中检索数据,计划用于 CMA-PI 上的业务系统。
安装
目标数据库支持 MySQL 客户端,所以需要使用 MySQL 的链接库。
CMA-PI 上的 Python 环境没有安装 MySQL 库,所以笔者使用用户目录下的 Anaconda 环境,并使用 conda 安装 SQLAlchemy 和 pymysql。
创建连接
创建数据库连接
from sqlalchemy import create_engine
engine = create_engine(
'mysql+pymysql://'
f'{user}:{password}'
f'@{host}/{database_name}',
)
conn = engine.connect()
执行查询
构造带参数的查询 SQL 语句
from sqlalchemy.sql import text
s = text(
"SELECT * "
f"FROM {table_name} "
"WHERE datetime=:start_time AND fcsthour=:forecast_hour"
)
start_time
是起报时间,forecast_hour
是预报时次。
执行 SQL 语句,设置参数值
query = conn.execute(
s,
start_time=start_time.to_pydatetime(),
forecast_hour=forecast_hour
)
处理结果
获取所有结果,返回元素为 tuple 的列表
result = query.fetchall()
如果知道返回的列名,或者在 SELECT 语句中指定具体的列名,可以很方便由返回结果构造 pandas.DataFrame
对象。
df = pd.DataFrame(
result,
columns=columns,
)
将查询结果保存到 csv 中,不保存 index
df.to_csv(
output_file,
index=False,
)
讨论
如果想要得到固定的结果,最好在 SELECT 语句中指定列名,这样返回结果的列内容和顺序是固定的。 方便使用 Fortran 、C++ 等未内置 CSV 处理库的编程语言解析。