目录
sql语句在日常数据分析中是必不可少的技能,但是要想精通sql需要一定的积累,同时对于数据结构的熟悉程度也有较高要求。在这种情况下,可以考虑在python中来完成一些数据操作,达到降维的目的,缺点就是可能运行的时间会变长。
1. 连接数据库
from sqlalchemy import create_engine
MYSQL_HOST = '123.456.78' # 地址
MYSQL_PORT = 3306 # 端口
MYSQL_USER = 'user_01' # 数据库名字
MYSQL_PWD = 'password' # 数据库密码
MYSQL_NAME = 'table_name' # 数据库表名
context_engine = create_engine('mysql+pymysql://%s:%s@%s:%d/%s?charset=utf8' % (
MYSQL_USER, MYSQL_PWD, MYSQL_HOST, MYSQL_PORT, MYSQL_NAME))
上述代码中的数据仅为举例,实际使用中对应替换即可
2. 读取和保存数据
from sqlalchemy import create_engine
import pandas as pd
MYSQL_HOST = '123.456.78' # 地址
MYSQL_PORT = 3306 # 端口
MYSQL_USER = 'user_01' # 数据库名字
MYSQL_PWD = 'password' # 数据库密码
MYSQL_NAME = 'table_name' # 数据库表名
class sql_data(object):
def __init__(self):
self._context_engine = create_engine('mysql+pymysql://%s:%s@%s:%d/%s?charset=utf8' % (
MYSQL_USER, MYSQL_PWD, MYSQL_HOST, MYSQL_PORT, MYSQL_NAME))
def context(self, sql): # 读取数据
df = pd.read_sql(sql, self._context_engine)
return df
def save(self, name, df): # 保存数据
df.to_sql(name=name, con=self._context_engine, if_exists='append', index=False)
def save_new(self, name, df): # 保存去重数据
df.to_sql(name=name, con=self._context_engine, if_exists='replace', index=False)
方便起见,将常用的功能打包成一个类模块。
3. 案例演示
if __name__ == '__main__':
# 建立连接
api = sql_data()
# 查询单个表的全量数据
test_sql = "SELECT * FROM test_table"
test_sql_data = api.context(test_sql)
# sql语句添加筛选
filtrate_name = 'name'
filtrate_sql = "SELECT * FROM test_table where filtrate_namee ='%s'" % (filtrate_name)
filtrate_data = api.context(filtrate_sql)
# 读取excel,并保存到数据库
test_df = pd.read_excel('test.xlsx')
api.save('test', test_df)
需要注意的是,在excel数据入库的时候,最好是将数据进行标准化处理(如小数保留位数,数据的格式),避免后续读取时不必要的麻烦。
本期分享到此结束,有问题随时交流。
本文介绍了如何在Python中使用SQLAlchemy连接数据库,包括读取和保存数据的方法,以及一个实际的案例演示,包括全量查询、筛选和Excel数据导入操作。
529

被折叠的 条评论
为什么被折叠?



