功能模块编写完成
This commit is contained in:
commit
0dc05d0649
19
.idea/dataSources.xml
generated
Normal file
19
.idea/dataSources.xml
generated
Normal file
@ -0,0 +1,19 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
|
||||
<data-source source="LOCAL" name="192.168.100.30" uuid="89d64204-61ba-45a4-b3e2-5a9147f6f785">
|
||||
<driver-ref>mysql</driver-ref>
|
||||
<synchronize>true</synchronize>
|
||||
<jdbc-driver>com.mysql.jdbc.Driver</jdbc-driver>
|
||||
<jdbc-url>jdbc:mysql://192.168.100.30:3306/test</jdbc-url>
|
||||
<driver-properties>
|
||||
<property name="autoReconnect" value="true" />
|
||||
<property name="zeroDateTimeBehavior" value="convertToNull" />
|
||||
<property name="tinyInt1isBit" value="false" />
|
||||
<property name="characterEncoding" value="utf8" />
|
||||
<property name="characterSetResults" value="utf8" />
|
||||
<property name="yearIsDateType" value="false" />
|
||||
</driver-properties>
|
||||
</data-source>
|
||||
</component>
|
||||
</project>
|
6
.idea/vcs.xml
generated
Normal file
6
.idea/vcs.xml
generated
Normal file
@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
6
config.py
Normal file
6
config.py
Normal file
@ -0,0 +1,6 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
redis_company_config = {'host': '192.168.100.20', 'port': 6379, 'db': 1}
|
||||
expirt_time = 7200
|
||||
mysql_promotion_config = {'user': 'miles', 'pswd': 'aspect', 'host': '192.168.100.30', 'db': 'test'}
|
||||
#mysql_promotion_config = {'user': 'mytga', 'pswd': 'gzVwh4HGR68G', 'host': '10.10.3.5', 'db': 'games_report'}
|
||||
#redis_company_config = {'host': '10.10.3.10', 'port': 6379, 'db': 2}
|
1
handler/__init__.py
Normal file
1
handler/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
# -*- coding: utf-8 -*-
|
1
log/__init__.py
Normal file
1
log/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
# -*- coding: utf-8 -*-
|
25
log/mylog.py
Normal file
25
log/mylog.py
Normal file
@ -0,0 +1,25 @@
|
||||
import logging
|
||||
|
||||
|
||||
def define_logger(filename="/data/logs/aa.log", debug=True):
|
||||
logger = logging.getLogger("")
|
||||
if debug == True:
|
||||
logger.setLevel(logging.INFO)
|
||||
else:
|
||||
logger.setLevel(logging.ERROR)
|
||||
|
||||
# 设置输出格式
|
||||
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
|
||||
|
||||
# 设置日志文件处理器
|
||||
fh = logging.FileHandler(filename)
|
||||
fh.setFormatter(formatter) # 为这个处理器添加格式
|
||||
|
||||
# 设置屏幕stdout输出处理器
|
||||
formatter_stdout = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
|
||||
sh = logging.StreamHandler(stream=None)
|
||||
sh.setFormatter(formatter_stdout)
|
||||
|
||||
# 把处理器加到logger上
|
||||
logger.addHandler(fh)
|
||||
# logger.addHandler(sh)
|
1
mysql/__init__.py
Normal file
1
mysql/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
# -*- coding: utf-8 -*-
|
179
mysql/mmysql.py
Normal file
179
mysql/mmysql.py
Normal file
@ -0,0 +1,179 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding:utf-8 -*-
|
||||
|
||||
"""
|
||||
date: 2016/07/11
|
||||
role: mysql的增删改查类
|
||||
usage: m = mysqlBase(host='xxx',db='xxx',user='xxx',pwd='xxx') 实例化
|
||||
m.insert('core',{'host_name':'ccc','process_name':'ddd','ip_addr':'192.168.136.41','status':'4'})
|
||||
m.update('table',{'field1':'value1','field2':'value2'},'id=1') 更新表名 字段名:值 条件
|
||||
m.delete('core','status=5 and id=12')
|
||||
m.change("update core set a='aaa' where id=1") 可以多条插入
|
||||
m.query("select * from core")
|
||||
"""
|
||||
import warnings
|
||||
|
||||
try:
|
||||
import MySQLdb
|
||||
except:
|
||||
import pymysql
|
||||
|
||||
pymysql.install_as_MySQLdb()
|
||||
import MySQLdb
|
||||
import logging
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
###mysql操作类
|
||||
class MysqlBase:
|
||||
|
||||
###连接数据库
|
||||
def __init__(self, **args):
|
||||
|
||||
###获取参数
|
||||
self.host = args.get('host', 'localhost')
|
||||
self.user = args.get('user')
|
||||
self.pswd = args.get('pswd')
|
||||
self.db = args.get('db', 'mysql')
|
||||
self.port = args.get('port', '3306')
|
||||
self.charset = args.get('charset', 'utf8')
|
||||
|
||||
try:
|
||||
self.conn = MySQLdb.connect(host=self.host, user=self.user, passwd=self.pswd, db=self.db,
|
||||
port=int(self.port), charset=self.charset)
|
||||
|
||||
self.curs = self.conn.cursor()
|
||||
|
||||
self.curs.execute('SET NAMES utf8')
|
||||
except:
|
||||
log.error('%s mysql connect error' % self.host)
|
||||
raise ValueError('mysql connect error %s' % self.host)
|
||||
|
||||
###释放资源
|
||||
def __del__(self):
|
||||
self.curs.close()
|
||||
self.conn.close()
|
||||
|
||||
###插入
|
||||
|
||||
def insert(self, table, data):
|
||||
_field = ','.join(['`%s`' % (k_insert) for k_insert in data.keys()])
|
||||
_value = ','.join(["'%s'" % (str(v_insert).replace("'", "\'")) for v_insert in data.values()])
|
||||
###拼接成sql语句
|
||||
_sql = 'INSERT INTO `%s`(%s) VALUES(%s)' % (table, _field, _value)
|
||||
|
||||
###执行
|
||||
self.curs.lastrowid = 0
|
||||
try:
|
||||
self.curs.execute(_sql)
|
||||
###提交
|
||||
self.conn.commit()
|
||||
# log.info('%s insert ' % _sql)
|
||||
|
||||
except:
|
||||
self.conn.rollback()
|
||||
log.error('%s insert error' % _sql)
|
||||
raise ValueError('112,insert error %s' % _sql)
|
||||
|
||||
return self.curs.lastrowid
|
||||
|
||||
###更新
|
||||
def update(self, table, data, condition):
|
||||
_field = ','.join(["`%s`='%s'" % (k_update, str(data[k_update]).replace("'", "\'")) for k_update in data])
|
||||
|
||||
_sql = 'UPDATE `%s` SET %s WHERE %s' % (table, _field, condition)
|
||||
|
||||
###执行
|
||||
resNum = 0
|
||||
try:
|
||||
resNum = self.curs.execute(_sql)
|
||||
###提交
|
||||
self.conn.commit()
|
||||
# log.info('%s update ' % _sql)
|
||||
except:
|
||||
self.conn.rollback()
|
||||
log.error('%s update error' % _sql)
|
||||
raise ValueError('update error %s' % _sql)
|
||||
|
||||
return resNum
|
||||
|
||||
###删除
|
||||
def delete(self, table, condition):
|
||||
_sql = 'DELETE FROM `%s` WHERE %s' % (table, condition)
|
||||
|
||||
###执行
|
||||
resNum = 0
|
||||
try:
|
||||
resNum = self.curs.execute(_sql)
|
||||
###提交
|
||||
self.conn.commit()
|
||||
# log.info('%s delete ' % _sql)
|
||||
|
||||
except:
|
||||
self.conn.rollback()
|
||||
log.error('%s delete error' % _sql)
|
||||
raise ValueError('112,delete error %s' % _sql)
|
||||
|
||||
return resNum
|
||||
|
||||
###直接给修改语句执行
|
||||
def change(self, sql, many=False):
|
||||
###过滤unknow table的warning
|
||||
warnings.filterwarnings('ignore')
|
||||
resNum = 0
|
||||
if many:
|
||||
try:
|
||||
###多条同时插入
|
||||
resNum = self.curs.executemany(sql, many)
|
||||
self.conn.commit()
|
||||
# log.info('%s exec ' % sql)
|
||||
|
||||
except:
|
||||
self.conn.rollback()
|
||||
log.error('%s exec error' % sql)
|
||||
raise ValueError('exec error %s' % sql)
|
||||
else:
|
||||
try:
|
||||
resNum = self.curs.execute(sql)
|
||||
###提交
|
||||
self.conn.commit()
|
||||
# log.info('%s exec ' % sql)
|
||||
|
||||
except:
|
||||
self.conn.rollback()
|
||||
log.error('%s exec error' % sql)
|
||||
raise ValueError('112,exec error %s' % sql)
|
||||
|
||||
return resNum
|
||||
|
||||
###查询
|
||||
def query(self, sql):
|
||||
res = ''
|
||||
try:
|
||||
self.curs.execute(sql)
|
||||
res = self.curs.fetchall()
|
||||
# log.info('%s query ' % sql)
|
||||
|
||||
except:
|
||||
log.error('%s query error' % sql)
|
||||
|
||||
# raise ValueError('query error %s'% sql)
|
||||
|
||||
return res
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
args = dict()
|
||||
args['host'] = '172.16.17.164'
|
||||
args['user'] = 'miles'
|
||||
args['pswd'] = 'aspect'
|
||||
args['db'] = 'test'
|
||||
sql_sel = "select * from bigdata_host limit 5"
|
||||
m = MysqlBase(**args)
|
||||
data = m.query(sql=sql_sel)
|
||||
m.insert('bigdata_host', {
|
||||
'hostname': 'ccc', 'remark': 'ddd', 'up_addr_p': '192.168.136.41', 'states': '4',
|
||||
'enter_time': '2017-03-13'
|
||||
})
|
||||
m.delete('bigdata_host', 'hostname="ccc"')
|
1
redis/__init__.py
Normal file
1
redis/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
# -*- coding: utf-8 -*-
|
13
redis/myredis.py
Normal file
13
redis/myredis.py
Normal file
@ -0,0 +1,13 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import redis
|
||||
import logging
|
||||
import redis
|
||||
from config import redis_company_config, expirt_time
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
pool = redis.ConnectionPool(host=redis_company_config['host'], port=redis_company_config['port'],
|
||||
db=redis_company_config['db'], decode_responses=True)
|
||||
|
||||
company_redis = redis.Redis(connection_pool=pool)
|
||||
expirt_time = expirt_time
|
114
server.py
Normal file
114
server.py
Normal file
@ -0,0 +1,114 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# pip install flask-restful
|
||||
from flask import Flask, jsonify
|
||||
from flask_restful import reqparse, abort, Api, Resource
|
||||
from log.mylog import define_logger
|
||||
import logging
|
||||
from redis.myredis import company_redis, expirt_time
|
||||
from mysql.mmysql import MysqlBase
|
||||
from config import mysql_promotion_config
|
||||
|
||||
|
||||
define_logger("/data/logs/promotion.log")
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
app = Flask(__name__)
|
||||
api = Api(app)
|
||||
mydb = MysqlBase(**mysql_promotion_config)
|
||||
|
||||
parser = reqparse.RequestParser()
|
||||
parser.add_argument('task')
|
||||
|
||||
|
||||
# # 操作(put / get / delete)单一资源Todo
|
||||
# shows a single todo item and lets you delete a todo item
|
||||
class Company(Resource):
|
||||
def get(self, comp_id):
|
||||
try:
|
||||
data = company_redis.hmget(comp_id, ['id', 'name', 'contact', 'appid', 'appkey'])
|
||||
if not data:
|
||||
sql = f"select id,name,contact,appid,appkey from company where id={comp_id};"
|
||||
data = mydb.query(sql)
|
||||
|
||||
company = {}
|
||||
company['id'], company['name'], company['contact'], company['appid'], company['appkey'] = data
|
||||
company_redis.hmset(company['id'], company)
|
||||
company_redis.expire(company['id'], expirt_time)
|
||||
except Exception:
|
||||
log.error(f"get company id {comp_id} failed! ", exc_info=True)
|
||||
return jsonify({'code': 0})
|
||||
return jsonify({'code': 1, 'body': data})
|
||||
|
||||
def delete(self, comp_id):
|
||||
try:
|
||||
company_redis.expirt(comp_id, 0)
|
||||
del_sql = f'delete from company where id={comp_id};'
|
||||
mydb.query(del_sql)
|
||||
except Exception:
|
||||
log.error(f"remove {comp_id} failed!", exc_info=True)
|
||||
return jsonify({'code': 0})
|
||||
return jsonify({'code': 1})
|
||||
|
||||
def post(self, comp_id):
|
||||
args = parser.parse_args()
|
||||
try:
|
||||
company = {}
|
||||
company['id'] = comp_id
|
||||
company['name'] = args['name']
|
||||
company['contact'] = args['contact']
|
||||
company['appid'] = args['appid']
|
||||
company['appkey'] = args['appkey']
|
||||
# insert to mysql
|
||||
mydb.insert("company", company)
|
||||
# insert to redsi
|
||||
company_redis.hmset(company['id'], company)
|
||||
company_redis.expirt(company['id'], expirt_time)
|
||||
except Exception:
|
||||
log.error("set values to company mysql/redis failed!", exc_info=True)
|
||||
return jsonify({'code': 0})
|
||||
return jsonify({'code': 1})
|
||||
|
||||
def put(self, comp_id):
|
||||
args = parser.parse_args()
|
||||
try:
|
||||
company = {}
|
||||
company['id'] = comp_id
|
||||
company['name'] = args['name']
|
||||
company['contact'] = args['contact']
|
||||
company['appid'] = args['appid']
|
||||
company['appkey'] = args['appkey']
|
||||
# insert to mysql
|
||||
update_sql = f"update company set id={company['id']} name={company['name']} contact={company['contact']}\
|
||||
appid={company['appid']} appkey={company['appkey']} where id={comp_id};"
|
||||
mydb.query("company", update_sql)
|
||||
# update redsi
|
||||
company_redis.hmset(company['id'], company)
|
||||
company_redis.expirt(company['id'], expirt_time)
|
||||
except Exception:
|
||||
log.error("update values to company redis,mysql failed!", exc_info=True)
|
||||
return jsonify({'code': 0})
|
||||
return jsonify({'code': 1})
|
||||
|
||||
|
||||
# # 操作(post / get)资源列表TodoList
|
||||
# shows a list of all todos, and lets you POST to add new tasks
|
||||
class CompanyList(Resource):
|
||||
def get(self):
|
||||
return jsonify({'code': 1, 'body': company_redis.lrang("ALL_Company", 0, -1)})
|
||||
|
||||
def post(self):
|
||||
args = parser.parse_args()
|
||||
try:
|
||||
company_redis.rpush("ALL_Company", args['company'])
|
||||
except Exception:
|
||||
log.error("Insert values to redis failed,args was {}!".format(args), exc_info=True)
|
||||
return jsonify({'code': 0})
|
||||
return jsonify({'code': 1})
|
||||
|
||||
|
||||
# 设置路由
|
||||
api.add_resource(CompanyList, '/company')
|
||||
api.add_resource(Company, '/company/<comp_id>')
|
||||
|
||||
if __name__ == '__main__':
|
||||
app.run(debug=True, port=8888)
|
Loading…
x
Reference in New Issue
Block a user