基于ADMEDP.EDM_REFERENCES表的REF字段精准查询问题求助
解决方案
核心修改点
- 精准过滤REF字段:在SQL查询中添加
REF LIKE '901-%'条件,匹配格式为901-yyyy的目标记录 - 修正DOCNUMBER查询逻辑:单个值查询用
=而非IN(IN用于多值批量匹配,单值场景会引发语法问题) - 完善空值安全处理:避免
record为None时访问record[0]触发异常 - 优化资源管理:使用
with语句自动管理数据库连接与游标,无需手动调用close()
修改后的完整代码
def look_up(): lookup_document = docnum_entry.get().upper() try: # with语句自动管理连接/游标,异常时也能保证资源释放 with pyodbc.connect(conn_str) as conn: with conn.cursor() as cursor: # 添加REF过滤条件,修正DOCNUMBER查询方式 cursor.execute( "SELECT REF FROM ADMEDP.EDM_REFERENCES WHERE DOCNUMBER = ? AND REF LIKE '901-%'", lookup_document ) record = cursor.fetchone() if record is None: messagebox.showwarning(title="WARNING!!!", message="Cannot find 901- document!") return # 提前终止,避免后续错误执行 print(record) webbrowser.open(f"http://.../{record[0]}") except pyodbc.Error as e: messagebox.showerror(title="Database Error", message=f"Query failed: {str(e)}")
关键说明
- REF匹配规则:
LIKE '901-%'严格匹配以901-开头的REF值,完全契合你给出的9xx-yyyy格式;若需匹配任意位置包含901的REF,可改为LIKE '%901%' - 异常捕获:新增数据库错误捕获,便于快速排查连接或查询故障
- 空值判断前置:获取记录后立即校验空值,避免后续代码因
record为None崩溃
内容的提问来源于stack exchange,提问作者Huy Ho
相关产品推荐
相关产品推荐

