python参数化str.format

  场景:使用python执行带有in的sql语句,对in中的句子进行参数化,如下所示:

select * from table where column in ('str1','str2'......)

  由于不确定in中的参数有多少个,使用原来%s的方式就不能解决,这时候就需要使用str.format:
基本语法是通过 {} 和 : 来代替以前的 % 。

  1. format 函数可以接受不限个参数,位置可以不按顺序。
>>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
'hello world'
 
>>> "{0} {1}".format("hello", "world")  # 设置指定位置
'hello world'
 
>>> "{1} {0} {1}".format("hello", "world")  # 设置指定位置
'world hello world'
  1. 也可以设置参数:
>>> "我的名字是{name},我{age}岁了!".format(name='Narido',age=6)
'我的名字是Narido,我6岁了!'

使用字典,字典前需要添加"**"

>>> "我的名字是{name},我{age}岁了!".format(**{'name':'Narido','age':6})
'我的名字是Narido,我6岁了!'

使用列表,如下0是必须要的:

>>> "我的名字是{0[0]},我{0[1]}岁了!".format(['Narido',6])
'我的名字是Narido,我6岁了!'

甚至,可以传入对象,如下0是可选的:

# coding: UTF-8
 
class Narido(object):
    def __init__(self, name,value):
    	self.name = name
        self.age = age
my_info = AssignValue('Narido',6)
print('我的名字是 {0.value},我{0.age}岁了'.format(my_info))  # "0" 是可选的
  1. 支持数字格式化,只需要添加":",其它语法见博客:Python基础之数据类型转换及格式化输出 如:
>>> print("{:.2f}".format(3.1415926));
3.14
  1. 如果想要输入{},可以使用{}进行转义,如下:
>>> "{}对应位置是{{0}}".format("test")
'test对应位置是{0}'

  经过上面的系统学习,我们来解决最初的问题:

>>> "select * from fruits_info where fruits_name in ({})".format(",".join('"' + item + '"' for item in ['apple','pear']))
'select * from fruits_info where fruits_name in ("apple","pear")'

  经过上面的学习,我发现,原来%也能解决:

>>> "select * from fruits_info where fruits_name in (%s)" % (",".join('"' + item + '"' for item in ['apple','pear']))
'select * from fruits_info where fruits_name in ("apple","pear")'

  白学习了……算了,多一种参数化的方式吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值