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

本文探讨了在Python中使用SQL查询学号并进行匹配的问题。由于数据库中学号字段的nchar类型导致的字符串匹配失败,通过使用rstrip()函数去除尾部空格解决了这一难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们从解决一个实际问题的角度出发来说明。
在login数据库中有一张表Student,希望:
①使用python查询Student中S#的列值
②然后从键盘输入一个学号,找出从键盘中输入的学号与这些列值中的哪一个相匹配。
表Student以及其各个列的数据类型如下:
在这里插入图片描述
在这里插入图片描述
首先查询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])

在这里插入图片描述
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,运行程序
在这里插入图片描述
居然显示98040202和8个列值全部匹配失败!!第五行这两个字符串明明是一样的啊!
在这里插入图片描述
——不一样!
问题出在Student表的数据类型上,回到SQL Server数据库,打开Student表的“设计”选项。
在这里插入图片描述
在Student表的S#的数据类型中,可以看到S#的数据类型为nchar(10)
在这里插入图片描述
这个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”
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值