在ironpython中利用装饰器执行SQL操作的例子


Posted in Python onMay 02, 2015

比较喜欢python的装饰器, 试了下一种用法,通过装饰器来传递sql,并执行返回结果
这个应用应该比较少
为了方便起见,直接使用了ironpython, 连接的mssql server

# -*- coding: utf-8 -*-
import clr
clr.AddReference('System.Data')
from System.Data import *
from functools import wraps

conn_str = "server=localhost;database=DB_TEST;uid=sa;password=sa2008"

def mssql(sql):
  def handler_result(rs):
    rst = []
    while rs.Read():
      rst.Add(rs[0])
    return rst


  def decorator(fn):
    @wraps(fn)
    def wrapper(*args, **kwargs):
      TheConnection = SqlClient.SqlConnection(conn_str)
      TheConnection.Open()
      try:
        MyAction = SqlClient.SqlCommand(sql, TheConnection)
        MyReader = MyAction.ExecuteReader()
      except Exception,ex:
        raise AssertionError(ex)
      rst_data = handler_result(MyReader)
      kwargs["sql_rst"] = rst_data
      result = fn(*args, **kwargs)
      MyReader.Close()
      TheConnection.Close()
      return result
    return wrapper
  return decorator



@mssql(sql="Select getdate()")
def get_data(sql_rst=""):
  print sql_rst[0]

get_data()

算是为了好玩吧,回看了下,可能实际用的机会不多

Python 相关文章推荐
python刷投票的脚本实现代码
Nov 08 Python
分享一个常用的Python模拟登陆类
Mar 29 Python
Python环境变量设置方法
Aug 28 Python
Python中扩展包的安装方法详解
Jun 14 Python
Python Dataframe 指定多列去重、求差集的方法
Jul 10 Python
python实现单链表中删除倒数第K个节点的方法
Sep 28 Python
PyQt编程之如何在屏幕中央显示窗体的实例
Jun 18 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
Oct 12 Python
Python对Tornado请求与响应的数据处理
Feb 12 Python
Python .py生成.pyd文件并打包.exe 的注意事项说明
Mar 04 Python
python中Matplotlib绘制直线的实例代码
Jul 04 Python
Python中的datetime包与time包包和模块详情
Feb 28 Python
用Python编写简单的定时器的方法
May 02 #Python
用Python程序抓取网页的HTML信息的一个小实例
May 02 #Python
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
May 02 #Python
在Python的Django框架中用流响应生成CSV文件的教程
May 02 #Python
详细解读Python中的__init__()方法
May 02 #Python
举例讲解Python的Tornado框架实现数据可视化的教程
May 02 #Python
Python的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 #Python
You might like
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
php 判断数组是几维数组
2013/03/20 PHP
php中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
PHP实现扎金花游戏之大小比赛的方法
2015/03/10 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
浅谈laravel框架与thinkPHP框架的区别
2019/10/23 PHP
JavaScript this 深入理解
2009/07/30 Javascript
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
Javascript 命名空间模式
2013/11/01 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
JS获取select的value和text值的简单实例
2014/02/26 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
表单验证正则表达式实例代码详解
2015/11/09 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
老生常谈JavaScript中的this关键字
2016/10/01 Javascript
jQuery实现checkbox列表的全选、反选功能
2016/11/24 Javascript
webpack进阶——缓存与独立打包的用法
2017/08/02 Javascript
ECMAscript 变量作用域总结概括
2017/08/18 Javascript
Vue 之孙组件向爷组件通信的实现
2019/04/23 Javascript
vue $mount 和 el的区别说明
2020/09/11 Javascript
Python中的两个内置模块介绍
2015/04/05 Python
Python3中多线程编程的队列运作示例
2015/04/16 Python
不要用强制方法杀掉python线程
2017/02/26 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
利用CSS3实现炫酷的飞机起飞动画
2016/09/17 HTML / CSS
css3绘制百度的小度熊
2018/10/29 HTML / CSS
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
沙特阿拉伯家用电器和电子产品购物网站:Sheta and Saif
2020/04/03 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
写clone()方法时,通常都有一行代码,是什么?
2012/10/31 面试题
工程师求职简历的自我评价分享
2013/10/10 职场文书
农林环境专业求职信
2014/03/13 职场文书
安全承诺书格式
2014/05/21 职场文书
电子商务专业毕业生求职信
2014/06/12 职场文书
共产党员批评与自我批评
2014/10/15 职场文书
pygame面向对象的飞行小鸟实现(Flappy bird)
2021/04/01 Python