这次在编写脚本过程中也用到了数据库,有些参数需要到库里查找;
另外也用到正则表达式处理一些数据
1.format()函数在编写sql语句中的应用
python中的sql语句需要写在一对引号中,例如
代码语言:javascript复制original_sql = "select * from movies where movie_name = '疯狂动物城'"
上面语句中movie_name字段目前是一个固定值,假如切换环境执行,如果对应的数据库没有"疯狂动物城"这条数据,那么这个sql查询就会失效,返回为空
所以我们需要保证要查询的movie_name尽可能有值
假如此时有一个接口可以获取movie_name或者事先准备好一批movie_name值
那么就可以读取接口返回的movie_name或者读取提前准备好的amovie_name
因此需要想办法使sql语句中的movie_name参数化,能够动态读取传进来的值
仔细看上面的sql语句,注意到sql语句包含在一对引号中,所以它就相当于一个字符串,因此可以利用format()函数来达到目的
使用方法如下
代码语言:javascript复制movies = ["疯狂动物城", "坏蛋必须死", "冰雪奇缘"]
original_sql = "select * from movies where movie_name = '{}'"
# 注意因为sql中字符要用引号包裹,所以这里的{}也需要用引号括起来({}可以看作是一个预定的位置,存放movie_name的值)
for i in movies:
sql = original_sql.format(i)
print(sql)
运行结果
再来看例子,假如一个名为get_name()的方法,返回电影的名称,
一个名为get_date()的方法,返回电影的上映日期
接下来要把电影名称和上映时间放到sql的查询条件中
代码语言:javascript复制original_sql = "select * from movies where movie_name = '{}' and release_date = '{}'"
sql = original_sql.format(self.get_name(), self.get_date())
另外format()函数也可以设置参数
上面的例子,可以改为
代码语言:javascript复制original_sql = "select * from movies where movie_name = '{name}' and release_date = '{date}'"
sql = original_sql.format(name=self.get_name(), date=self.get_date())
2. 正则表达式提取中文字符
有时接口返回的某个字段值得时候,会自动加上某个后缀
例如姓名:张三qt,李四1,王五rw
其实数据库中存在的数据不带后缀,就是单纯的中文字符
例如:
select * from name_list where name = '张三' #可以查到数据
select * from name_list where name = '张三qt' #查不到数据
所以在通过接口获取到这些数据后,需要处理一下,只保留中文字符,然后传给sql查询语句
这里通过正则表达式的方式来处理
代码语言:javascript复制import re
name = "张三rx"
pattern = re.compile(r'[u4e00-u9fa5]') # 定义一个正则表达式,去掉字符串末尾的数字
m = pattern.findall(name) # 匹配结果,返回每个汉字组成的列表
print(m)
real_name = "".join(m) # 将每个汉字组成一个字符串
print(real_name)
运行结果