如何制作pythonmysqldb模板?

2024-07-03 02:04:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我学习了一些关于pythonmysqldb的基础知识,当我想为查询定义另一个函数时,我必须反复编写(connect,cursor…try..) 所以我想设计一个像jdbcTemplate(javaee,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()

打印“返回值”,插入测试数据库(data=“确定”)

^{2}$

文件“D:\WorkSpaces\Aptana Studio 3 Workspace\VLuck\src\com\测试.py“,第164行,英寸 打印“返回值”,插入测试数据库(data=“确定”) TypeError:wrap()为关键字参数“data”获取了多个值

但是失败了,我该怎么做


Tags: namefielddbdatareturnloggingdefconnect
1条回答
网友
1楼 · 发布于 2024-07-03 02:04:31

我想出了一个解决方案,灵感来自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})

相关问题 更多 >