import os
import sys
#将脚本所在的工程添加到 1、环境变量
# sys.path.append(‘c:/Users/Administrator/www/mymac‘) #绝对路径
sys.path.append(‘../../mymac‘) #相对路径
#将项目路径添加到 2、系统环绕搜寻的路径
os.environ[‘DJANGO_SETTINGS_MODULE‘] = "mymac.settings"
#导入django模块
import django
#导入科学计算库
import pandas as pd
import numpy as np
#导入第三方库sqlalchemy的数据库引擎
from sqlalchemy import create_engine
#加载项目配置
django.setup()
#加载django的数据表类,类名的爆红??问题转给了df对象,忽略
from myapp.models import Student
if __name__ == "__main__":
obj = Student.objects.all()
print("测试绕过route-view导入数据库,利用脚本py连接django的ORM\n{}".format(obj))
#建立数据库引擎
engine = create_engine(‘mysql+pymysql://root:123456@localhost:3306/mymac‘)
sql = ‘select id,name,age,gender from student‘
#建立一个基于pandas查询数据框架类的对象
df = pd.read_sql_query(sql,engine)
print("df = pd.read_sql_query(sql,engine) #建立一个基于pandas查询数据框架类的对象\n{}".format(df))
#select * from student order by age asc | desc
df = df.sort_values([‘age‘,‘gender‘],ascending=False)
print("df = df.sort_values([‘age‘,‘gender‘],ascending=False) #指定多字段排序,遵循最左原则,注意:这是矩阵数组操作,不是在数据库操作,需要重新赋值\n{}".format(df))
_df = df.sort_values([‘age‘]).head(1)
print("_df = df.sort_values([‘age‘]).head(1) #取年龄最小的学生,从头部取第一个\n{}".format(_df))
print(‘#所有字段的平均值\n{}‘.format(df.mean()))
print(‘#矩阵 按列 求平均值\n{}‘.format(df.mean(0)))
print(‘#矩阵 按行 求平均值\n{}‘.format(df.mean(1)))
avg_age = df.loc[df[‘gender‘] == 0].age.mean()
print("avg_age = df.loc[df[‘gender‘] == 0].age.mean() #使用 loc[] 方法指定字段---查整个班的女生平均年龄\n{}".format(avg_age))
view = df.loc[(df[‘age‘] < avg_age) & (df[‘gender‘] == 0)]
print("view = df.loc[(df[‘age‘] < avg_age) & (df[‘gender‘] == 0)] #查小于平均年龄的女生\n{}".format(view))
data = df.loc[ df[‘gender‘] == 1, [‘id‘,‘name‘]]
print("data = df.loc[ df[‘gender‘] == 1, [‘id‘,‘name‘]] #查指定字段的数据\n{}".format(data))
"""
pandas的矩阵转成excel文件,需要安装一个Exel插件 pip install openpyxl
基于清华学校的源安装 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple openpyxl
将dataframe写入数据表 表名,数据引擎,索引是否入库
"""
df.to_sql(‘student_copy‘,engine,index=False)
#导出excel文件
df.to_excel(‘student.xlsx‘)
建立一个基于pandas查询数据框架类的对象
原文:https://www.cnblogs.com/justblue/p/10482389.html