pymssql 查询日期数据丢失问题解决方案
您使用 pymssql 查询数据库时,发现日期数据没有进入 resultList 中,而对应位置都是 0,这可能是由于以下几个原因导致的:
-
数据库表是否存在以及数据匹配: 首先要确认
StockIn表是否存在于您的数据库中,并且确保表中存在与查询条件匹配的记录。您可以尝试直接在数据库管理工具中执行查询语句,以验证数据是否存在。 -
日期格式一致性: 检查您输入的日期格式与数据库中存储的日期格式是否一致。如果格式不一致,查询条件可能无法匹配到任何记录。您可以查看数据库表的设计,了解日期字段的类型和格式,并根据此调整代码中
date的格式。 -
数据库连接成功性: 确保您的数据库连接已成功建立。可以在连接数据库之前打印出数据库连接信息,以检查配置文件中的信息是否正确。
-
查询语句正确性: 将生成的查询语句打印出来,仔细检查查询条件是否被正确地添加到语句中,以及是否符合 SQL 语法规范。
-
查询结果正确性: 尝试打印出查询结果,查看结果中是否包含了预期的数据,以确定问题是否发生在数据提取阶段。
如果以上步骤都没有解决问题,那么可能是 pymssql 库的问题。您可以尝试使用其他的数据库连接库,如 pyodbc 或 mysql-connector-python,以排除库本身存在的错误。
以下是代码示例:
def searchStockIn(self):
# 获取输入
name = self.nameLineEdit.text()
category = self.categoryLineEdit.text()
supplier = self.supplierLineEdit.text()
date = self.dateLineEdit.text()
# 连接数据库
try:
with open('config.json', 'r', encoding='utf-8') as config:
c = json.load(config)
connect = pymssql.connect(host=c['System']['Database']['server'],
user=c['System']['Database']['user'],
password=c['System']['Database']['password'],
database=c['System']['Database']['database'])
cursor = connect.cursor()
if not cursor:
raise Exception('数据库连接失败')
# 生成查询语句
query = 'SELECT * FROM StockIn'
if not (name or category or supplier or date):
query += ';'
else:
query += ' WHERE '
conditions = []
if name:
conditions.append(f'mname='{name}'')
if category:
conditions.append(f'category='{category}'')
if supplier:
conditions.append(f'supplier='{supplier}'')
if date:
conditions.append(f'date='{date}'')
query += ' AND '.join(conditions)
print(query) # 打印查询语句以检查
cursor.execute(query)
result = cursor.fetchall()
resultList = [[0 for j in range(len(result[0]))] for i in range(len(result))]
for i in range(len(result)):
for j in range(len(result[0])):
if type(result[i][j]) == str:
resultList[i][j] = result[i][j].strip()
if type(result[i][j]) == int:
resultList[i][j] = str(result[i][j])
print(resultList) # 打印查询结果以检查
self.presentTable.presentData(resultList)
self.presentTable.setColumnName(['iid', 'mid', '名称', '种类', '数量', '入库单位', '日期'])
except Exception as e:
print('查询入库异常: ', str(e))
finally:
if cursor:
cursor.close()
if connect:
connect.close()
通过仔细排查以上几个方面,您应该能够找到并解决日期数据丢失的问题。
原文地址: https://www.cveoy.top/t/topic/lEpr 著作权归作者所有。请勿转载和采集!