在Python MySQLdb模块中更改参数样式

0 投票
1 回答
1189 浏览
提问于 2025-04-18 16:48

我默认的 MySQL 参数样式是:'format'

>>>MySQLdb.paramstyle
'format'

我想把默认的参数样式改成 'pyformat',因为这样我可以写出像 "WHERE name=%(name)s" 这样的查询。有没有办法做到这一点?

1 个回答

1

我很确定这件事不可能做到,除非你深入到库的内部去搞一些复杂的操作…… -- 这个 paramstyle硬编码的,遵循了 PEP 249 的规范。

另外要注意的是,转义操作总是使用 tuple……

我想如果你替换掉:

if args is not None:
    query = query % tuple(( get_codec(a, self.encoders)(db, a) for a in args ))

用类似这样的东西:

if args is not None:
    if isinstance(args, tuple):
        args = tuple(get_codec(a, self.encoders)(db, a) for a in args)
    elif isinstance(args, dict):
        args = {k: get_codec(a, self.encoders)(db, a) for a in args}
    query = query % args

在这里,你可能想在一个 Cursor 的子类中做这个操作——然后你可以把它作为参数传给连接……

总的来说,这个事情有点“复杂”,因为重写整个执行方法可能会让你不得不使用一些不在“公开” API 中的东西,但至少应该是可行的。

撰写回答