pymssql:从结果行中删除或替换 NULL 值
pymssql: remove or replace NULL values from result rows
当我使用 pymssql 执行 MSSQL 查询时,我一直遇到反复出现的问题。
这是我正在使用的代码:
listOfRows = [] # I will append all reult rows to this list
conn = pymssql.connect(user = 'the user', password = 'password', server = 'theserver', database = 'thedb')
cursor = conn.cursor()
query = 'SELECT * FROM table'
cursor.execute(query)
row = cursor.fetchone()
while row:
row = cursor.fetchone()
listOfRows.append(row)
listOfRows 列表以列表元组形式结束,例如:
[('value1', None, 'valuex'), (None, 'value2', 'valuex'), None]
请注意,元组有 None 个值,而且列表总是以其最后一个值结束也为 None.
我尝试对这些结果进行的许多操作都出现错误。例如:
[list(x) for x in listOfRows]
导致错误:
TypeError: 'NoneType' object is not iterable
有什么有效的方法可以避免这个问题吗?解决方案可以在查询级别或使用 Python 方法。我发现自己花了很多时间编写 for 循环以删除 None 值。
您搞乱了 while
循环中的逻辑。目前您从数据库中获取行,将其附加到列表中,然后检查该行是否不是 None
。因此,您在列表末尾的条目为 None
:
[('value1', None, 'valuex'), (None, 'value2', 'valuex'), None]
# single `None` object ^
相反,您应该从数据库中获取行,检查 None
,然后将其附加到列表中。因此你的代码应该是:
cursor.execute(query)
row = cursor.fetchone()
while row:
listOfRows.append(row) # <- Interchanged
row = cursor.fetchone() # <-- Lines
此外,在您当前的逻辑中,您跳过了第一行的内容。
当我使用 pymssql 执行 MSSQL 查询时,我一直遇到反复出现的问题。
这是我正在使用的代码:
listOfRows = [] # I will append all reult rows to this list
conn = pymssql.connect(user = 'the user', password = 'password', server = 'theserver', database = 'thedb')
cursor = conn.cursor()
query = 'SELECT * FROM table'
cursor.execute(query)
row = cursor.fetchone()
while row:
row = cursor.fetchone()
listOfRows.append(row)
listOfRows 列表以列表元组形式结束,例如:
[('value1', None, 'valuex'), (None, 'value2', 'valuex'), None]
请注意,元组有 None 个值,而且列表总是以其最后一个值结束也为 None.
我尝试对这些结果进行的许多操作都出现错误。例如:
[list(x) for x in listOfRows]
导致错误:
TypeError: 'NoneType' object is not iterable
有什么有效的方法可以避免这个问题吗?解决方案可以在查询级别或使用 Python 方法。我发现自己花了很多时间编写 for 循环以删除 None 值。
您搞乱了 while
循环中的逻辑。目前您从数据库中获取行,将其附加到列表中,然后检查该行是否不是 None
。因此,您在列表末尾的条目为 None
:
[('value1', None, 'valuex'), (None, 'value2', 'valuex'), None]
# single `None` object ^
相反,您应该从数据库中获取行,检查 None
,然后将其附加到列表中。因此你的代码应该是:
cursor.execute(query)
row = cursor.fetchone()
while row:
listOfRows.append(row) # <- Interchanged
row = cursor.fetchone() # <-- Lines
此外,在您当前的逻辑中,您跳过了第一行的内容。