PythonStock(7):使用 dataTable+Editor+python+Tornado 实现数据通用CRUD
来源:互联网 发布:php员工信息列表 编辑:程序博客网 时间:2024/05/18 01:32
前言
使用Python开发一个股票项目。
项目地址:
https://github.com/pythonstock/stock
相关资料:
http://blog.csdn.net/freewebsys/article/category/7076584
主要使用开发语言是python。
使用的lib库是pandas,tushare,TensorFlow,tornado等。
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/78031100未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys
1,使用editor编辑数据
官方demo:
https://editor.datatables.net/examples/inline-editing/simple
在股票系统中需要录入自己的股票数据,和一些字典数据表。
对这些数据表进行简单的编辑查看。不用每次都做一个CRUD,进行简单的字典表处理。
利用之前做的数据查询通用的查询显示。
代码已经上传到github上了。
最终效果:
2,增加html代码
editor = new $.fn.dataTable.Editor( { i18n: { create: { button: "新建", title: "创建新数据", submit: "保存" }, edit: { button: "修改", title: "修改数据", submit: "保存" }, remove: { button: "删除", title: "删除数据", submit: "删除", confirm: { _: "确定删除 %d 条数据?", 1: "确定删除 1 条数据?" } }, error: { system: "发生了一系统错误,(更多信息)" }, datetime: { previous: '前一月', next: '下一月', months: [ '1月', '2月', '3月', '4月', '5月', '6月', '7月', '8月', '9月', '10月', '11月', '12月' ], weekdays: [ '星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六' ] } }, ajax: "/data/editor/save?table_name={{ stockWeb.table_name }}", table: "#dynamic-table", fields: [ {% for index,element in enumerate(stockWeb.columns) %} { label: "{{ stockWeb.column_names[index] }}:", name: "{{ element }}" {% if element == "date" %} ,type: "datetime" {% end %} },{% end %} ] } ); var nameParam = $.getUrlVar('table_name'); //console.log(nameParam); var myTable = $('#dynamic-table').DataTable( { "dom": "Bfrtip", "bFilter": true, "ordering": true, "processing": true, "serverSide": true, "lengthMenu": [[20, 30, 50, 100,1000, -1], [20, 30, 50, 100,1000, "All"]], "language": { "url": "/static/js/datatables.Chinese.json" }, "ajax": "/stock/api_data?type=editor&name="+nameParam, "columns": [ { "data": "", "defaultContent": "", "className": 'select-checkbox', "orderable": true }, {% for column in stockWeb.columns %} { "data": "{{ column }}" }, {% end %} ], select: { style: 'os', selector: 'td:first-child' }, buttons: [ { extend: "create", editor: editor, text: '新增' }, { extend: "edit", editor: editor, text: '编辑' }, { extend: "remove", editor: editor, text: '删除' } ] } );
使用 for index,element in enumerate(stockWeb.columns) 循环将配置数据打印。
Editor 中增加了i18n 的支持,默认的是英文的。
https://editor.datatables.net/examples/simple/i18n.html
同时增加了buttons按钮。有3个按钮,【新增】,【编辑】,【删除】。
在数据的每一列里面增加了一个checkbox,选择数据之后才能进行编辑和删除操作。
而不是像其他操作那样在最后有一个编辑按钮。使用起来不是很直接。
3,后台CRUD
查询操作前面已经实现了,现在开始做的新增,修改,删除操作。
# 获得页面数据。class SaveEditorHandler(webBase.BaseHandler): @gen.coroutine def post(self): action = self.get_argument("action", default=None, strip=False) logging.info(action) table_name = self.get_argument("table_name", default=None, strip=False) stockWeb = stock_web_dic.STOCK_WEB_DATA_MAP[table_name] # 临时map数组。 param_map = {} # 支持多排序。使用shift+鼠标左键。 for item, val in self.request.arguments.items(): # 正则查找 data[1112][code] 里面的code字段 item_key = re.search(r"\]\[(.*?)\]", item) if item_key: tmp_1 = item_key.group() if tmp_1: tmp_1 = tmp_1.replace("][", "").replace("]", "") param_map[tmp_1] = val[0].decode("utf-8") #logging.info(param_map) if action == "create": logging.info("###########################create") # 拼接where 和 update 语句。 tmp_columns = "`, `".join(stockWeb.columns) tmp_values = [] for tmp_key in stockWeb.columns: tmp_values.append(param_map[tmp_key]) # 更新sql。 tmp_values2 = "', '".join(tmp_values) insert_sql = " INSERT INTO %s (`%s`) VALUES('%s'); " % (stockWeb.table_name, tmp_columns, tmp_values2) logging.info(insert_sql) try: self.db.execute(insert_sql) except Exception as e: err = {"error": str(e)} logging.info(err) self.write(err) return elif action == "edit": logging.info("###########################edit") # 拼接where 和 update 语句。 tmp_update = genSql(stockWeb.columns, param_map, ",") tmp_where = genSql(stockWeb.primary_key, param_map, "and") # 更新sql。 update_sql = " UPDATE %s SET %s WHERE %s " % (stockWeb.table_name, tmp_update, tmp_where) logging.info(update_sql) try: self.db.execute(update_sql) except Exception as e: err = {"error": str(e)} logging.info(err) self.write(err) return elif action == "remove": logging.info("###########################remove") # 拼接where 语句。 tmp_where = genSql(stockWeb.primary_key, param_map, "and") # 更新sql。 delete_sql = " DELETE FROM %s WHERE %s " % (stockWeb.table_name, tmp_where) logging.info(delete_sql) try: self.db.execute(delete_sql) except Exception as e: err = {"error": str(e)} logging.info(err) self.write(err) return self.write("{\"data\":[{}]}")
在每一个操作里面都有 一个 action = self.get_argument(“action”, default=None, strip=False) 参数。用来区分3种操作。
要对数据进行sql 的拼接:
生成 INSERT INTO , UPDATE %s SET, DELETE FROM 等sql 语句。
使用self.db.execute 执行sql,并讲异常捕获,返回给前端。
效果:
数据格式是 {“error”: “xxxx error”},datatable 会将错误的信息显示到最下面。
同时还编写了一个工具方法,拼接数据:
# 拼接sql,将value的key 和 value 放到一起。def genSql(primary_key, param_map, join_string): tmp_sql = "" idx = 0 for tmp_key in primary_key: tmp_val = param_map[tmp_key] if idx == 0: tmp_sql = " `%s` = '%s' " % (tmp_key, tmp_val) else: tmp_sql += join_string + (" `%s` = '%s' " % (tmp_key, tmp_val)) idx += 1 return tmp_sql
可以讲 column 字段组合起来。按照不同字符串进行join。
配置stock_web 字段:
class StockWebData: def __init__(self, mode, type, name, table_name, columns, column_names, primary_key, order_by): self.mode = mode # 模式,query,editor 查询和编辑模式 self.type = type self.name = name self.table_name = table_name self.columns = columns self.column_names = column_names self.primary_key = primary_key self.order_by = order_by if mode == "query": self.url = "/stock/data?table_name=" + self.table_name elif mode == "editor": self.url = "/data/editor?table_name=" + self.table_name....STOCK_WEB_DATA_LIST.append( StockWebData( mode="editor", type="股票配置管理", name="持仓管理", table_name="user_stock", columns=["code", "date", "price", "shares", "commission_rate", "tax_rate", "comment"], column_names=["股票代码", "日期", "价格", "数量", "佣金", "税率", "备注"], primary_key=["code", "date"], order_by=" code desc " ))
4,总结
对datatable的研究都差不多了。有增加了数据的crud。
可以对字典数据进行CRUD,只需要配置下就可以了,节省了大部分代码。
非常的方便。
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/78031100 未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys
- PythonStock(7):使用 dataTable+Editor+python+Tornado 实现数据通用CRUD
- PythonStock(6):使用 dataTable+python+Tornado 实现服务端多字段查询
- PythonStock(3):使用python tornado web进行开发
- PythonStock(5):使用 dataTable+python 实现服务端多字段排序
- PythonStock(4):使用python + dataTable 进行开发
- PythonStock(8):使用优矿web学习python入门
- PythonStock(12):使用python,pandas进行股票分析
- PythonStock(15):使用bokeh 展示股票报表数据
- DataTable Editor使用
- PythonStock(1):python 股票系统设计
- PythonStock(2):tushare宏观数据使用pandas入库,增加唯一索引
- PythonStock(9):使用优矿uqer.io 进行简单的数据分析
- PythonStock(14):使用pandas 批量处理股票数据,批量计算股票指标
- Python Tornado 使用经验
- python tornado模板使用
- PythonStock(11):使用pandas计算股票波峰波谷猜想
- 使用mybatis实现CRUD
- 使用JDBC实现CRUD
- HashMap理解
- [分享]完全中文注释的uC/OS-II2.52源代码
- java表达式之Lambda表达式(一)
- vue-router
- LINUX basics (Youtube)
- PythonStock(7):使用 dataTable+Editor+python+Tornado 实现数据通用CRUD
- 【安全牛学习笔记】APPSCAN
- Oracle常见问题
- Win10下, 远程访问文件夹cache用户权限导致网站访问权限错乱
- 一个视觉交互设计失败的案例
- Word产品需求文档,已经过时了
- 美国滴滴打人上线,约架神器如何玩转暴力社区?
- ubuntu add sourse.list
- Activiti最全入门教程