在Python MySQLdb模块中更改参数样式
我默认的 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 中的东西,但至少应该是可行的。