https://www.djangoproject.com/start/
https://github.com/apache/incubator-echarts/tags 选择版本之后解压
1、pip install Django
2、Django 开启项目:进入你想要创建项目的目录,执行
django-admin startproject projectname
3、进入你的项目目录,创建一个application
django-admin startapp appname
4、修改配置
主要是修改以下几个位置:
ALLOWED_HOSTS = ['*']
INSTALLED_APPS = [
#这个列表的最后一行添加你的APP的名字
'BI_main_APP',
]
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"),
)
#由于我还要执行SQL语句,但是SQL语句都比较长,写在程序里显得冗余,于是自定义了一个参数SQL_PATH
SQL_PATH = os.path.join(BASE_DIR,'BI_main_APP/SQLs')
想要调用它只需要
from projectname.settings import *
就可以了
由于此项目并不会忘数据库存东西(暂时),所以也就没有配置数据库配置
5、路由配置
6、视图
import json
from django.shortcuts import render
from llj_eBI.settings import *
import pandas
from BI_main_APP import SQLEngine
def test(request):
###读取sql
with open(os.path.join(SQL_PATH,'llj_statistics/drop_every_store/chaobei'),'r') as f:
sql = f.read()
###创建sql引擎
engine =SQLEngine.llj_statistics_engine().create_engine()
###执行sql
data = pandas.read_sql(sql,engine)
###关闭ssh通道
SQLEngine.server.close()
dataDict = {
"""此字典为传到模板的json数据"""
}
####注意传到模板的时候要用json.dumps将字典转化为字符串,注意ensure_ascii=False以免模板解析时报错
return render(request,'drop/chaobei.html',{'context':json.dumps(dataDict,ensure_ascii=False)})
我们创建了一个SQLEngine模块来建立带ssh通道的sql引擎,具体如下:
import pymysql
from sshtunnel import SSHTunnelForwarder
####连接引擎
###单例字典
_instance = {}
server = SSHTunnelForwarder(
('ssh机ip', 22), # B机器的配置
ssh_password='password',
ssh_username='root',
remote_bind_address=('数据库ip', 3306)) # A机器的配置
####单例模式装饰器
def singleton(cls):
global _instance
def inner():
if cls not in _instance:
_instance[cls] = cls()
return _instance[cls]
return inner
##基础连接类
class baseEngine(object):
def __init__(self):
self.dbname= None
def create_engine(self):
server.start()
mysql_connect_engine = pymysql.connect(host='127.0.0.1', # 此处必须是是127.0.0.1
port=server.local_bind_port,
user='mysqluser',
passwd='mysqlpassword',
db=self.dbname)
return mysql_connect_engine
@singleton
class llj_statistics_engine(baseEngine):
def __init__(self):
self.dbname = 'tablename'
需要注意的是,在使用完return出去的sql连接对象时,要记得关闭ssh通道。
7、模板
根据ECharts官网的例子,我们可以照葫芦画瓢,因为只有一个图,所以也就没有再建立js文件。当然,我们需要把ECharts放到我们当前的项目目录下,然后将其导入到我们的模板中。注意,echarts.js并不是ECharts主目录的那个,而是/echarts/dist/echarts.js
<!DOCTYPE html>
<html>
<head>
{% load staticfiles %}
<meta charset="utf-8">
<!-- 引入 ECharts 文件 -->
<script src={% static 'BI_main_APP/utils/echarts/dist/echarts.js' %}></script>
<div style="border:2px solid #666;width:100%;height:1000px;float:left" id="chartmain"></div>
<script type="text/javascript">
var context = {{ context|safe }};
var myChart = echarts.init(document.getElementById('chartmain'));
//配置对象
var option = {
title:{
text:context["title"]
},
legend:{
data:context['legend']
},
xAxis:{
data:context['xAxis']['data']
},
yAxis:{},
series:[
context['series']
]
};
myChart.setOption(option);
</script>
</head>
</html>
以上就是本篇文章的内容,略显潦草,希望能帮助大家解决ssh通道连接mysql的问题。