关于查询类接口的一些总结 (第贰节)

2022-03-15 16:50:11 浏览数 (1)

这次在编写脚本过程中也用到了数据库,有些参数需要到库里查找;

另外也用到正则表达式处理一些数据

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)

运行结果

0 人点赞