【问题标题】:how to make a python-mysqldb template?如何制作 python-mysqldb 模板?
【发布时间】:2012-03-06 19:05:07
【问题描述】:

我已经学习了一些关于 python-mysqldb 的基础知识,当我想定义 anther 函数进行查询时,我必须重复编写 (connect ,cursor...try ..) 所以我想设计一个像 jdbcTemplate (Java EE, Spring) 这样的模板 我的代码是:

def DBV():
def templateFN(fn):
    logging.basicConfig(level=logging.INFO)
    log = logging.getLogger('DB')
    conn = MySQLdb.connect(user='root',passwd='247326',db='lucky',charset="utf8",cursorclass=MySQLdb.cursors.DictCursor);   
    cursor = conn.cursor() 
    def wrap(data=None):
        try:
            return fn(cursor=cursor,data=data)
            #conn.commit()
        except Exception ,e: 
            conn.rollback()
            log.error('%s, transaction rollback',e)
        finally:
            cursor.close()
            conn.close()

    return wrap  
class DB():
    @templateFN
    def insertTest(self,cursor,data=None):
        data = {
                'field':'this is a test',
                'name':'this is a name'
                }
        return cursor.execute('insert into test(field,name) values(%(field)s,%(name)s)',data)
return DB()

db = DBV()

打印'返回值',db.insertTest(data="ok")

Traceback (most recent call last):

文件“D:\WorkSpaces\Aptana Studio 3 Workspace\VLuck\src\com\test.py”,第 164 行,在 打印'返回值',db.insertTest(data="ok") TypeError: wrap() 为关键字参数“数据”获取了多个值

但是失败了,我该怎么做才对

【问题讨论】:

  • 某些缩进可能无法正确显示:)
  • 为什么“conn.commit()”只是一条评论?
  • 呃,我不想把它插入数据库进行测试
  • 它是如何“失败”的?发生了什么?
  • 哈哈,忘记贴错误信息,我只是编辑它,请帮助我

标签: python templates mysql-python


【解决方案1】:

这是我提出的一个解决方案,灵感来自another answer

def connect_mysql(func):
    # Assign value of 'self' to be default func
    func.func_defaults = func.func_defaults[:-1] + (func,)
    func._cnx = mysql.connector.connect(**CONFIG)
    func._cursor = func._cnx.cursor()
    return func

@connect_mysql
def test(data, self=None):
    self._cursor.execute("SELECT %(c1)s", data)
    print(self._cursor.fetchall())

test({'c1': 1})

【讨论】:

    猜你喜欢
    • 2011-08-24
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 2014-11-09
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 2016-03-17
    相关资源
    最近更新 更多