利用rstrip()函数去掉来自数据库的字符串中的空格

我们从解决一个实际问题的角度出发来说明。
在login数据库中有一张表Student,希望:
①使用python查询Student中S#的列值
②然后从键盘输入一个学号,找出从键盘中输入的学号与这些列值中的哪一个相匹配。
表Student以及其各个列的数据类型如下:
利用rstrip()函数去掉来自数据库的字符串中的空格_第1张图片
利用rstrip()函数去掉来自数据库的字符串中的空格_第2张图片
首先查询Student中S#的列值:

import pymssql

sqlQuery="select S# from Student"
conn = pymssql.connect(server='DESKTOP-LYZ', user='sa', password='12345', database='login')
cursor = conn.cursor()
cursor.execute(sqlQuery)
results = cursor.fetchall()
#print(results)#希望输出的是列值,而不是记录,因此不直接输出results
for k in range(len(results)):
    print(results[k][0])

利用rstrip()函数去掉来自数据库的字符串中的空格_第3张图片
S#的列值已经查询完毕了。按照一般的想法,只需要从键盘输入一个学号,挨个和上面的8个列值比较,如果二者相等,任务就完成了,看起来十分轻松加愉快。

Snum=input('输入学号:')
print('results[k][0]    Snum          匹配是否成功')
for k in range(len(results)):
    if Snum == results[k][0]:
        print('   '+results[k][0]+'    '+Snum+"          匹配成功,成功匹配第",end='')
        print(k+1,end='')
        print("个学号")
    else:
        print('   '+results[k][0]+'    '+Snum+"          匹配失败")

输入98040202,运行程序
利用rstrip()函数去掉来自数据库的字符串中的空格_第4张图片
居然显示98040202和8个列值全部匹配失败!!第五行这两个字符串明明是一样的啊!
在这里插入图片描述
——不一样!
问题出在Student表的数据类型上,回到SQL Server数据库,打开Student表的“设计”选项。
利用rstrip()函数去掉来自数据库的字符串中的空格_第5张图片
在Student表的S#的数据类型中,可以看到S#的数据类型为nchar(10)
利用rstrip()函数去掉来自数据库的字符串中的空格_第6张图片
这个10的意义不仅是规定S#的长度最多为10,同时如果S#长度小于10,不足10的部分会补足空格。又因为所有的学号都是8为,也就是说第一步查询到的S#不是“98030101”、“98030102”…,而是“9803010__”、“98030102__”
在第二步查询匹配的时候,以输入Snum为“98040202”为例,显然“98040202”与“98040202__”是两个不同的字符串,不满足Snum == results[k][0],因此全部显示匹配失败。
为了成功匹配,需要将来自数据库的字符串中空格去掉,可以利用rstrip()函数
rstrip()函数的功能是去掉字符串末尾的特定字符,当括号为空时默认去掉为空格
例如,去掉“1000****”中的*:

num="1000****"
print(num.rstrip('*'))

输出结果为“1000”
在这里插入图片描述
去掉“1000 ”中的空格

num="1000    "
print(num.rstrip())

在这里插入图片描述
现在我们将之前代码中的

Snum == results[k][0]

替换为

Snum == results[k][0].rstrip()

执行程序,输入“98040202”
利用rstrip()函数去掉来自数据库的字符串中的空格_第7张图片

你可能感兴趣的:(Python学习,sql,数据库,python)