You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python连接外部数据库生成QR Code时遇FileNotFoundError及路径问题

解决FileNotFoundError并将QR Code保存到指定目录

错误原因分析

从报错信息No such file or directory: '0001-87L58/1.eps'能直接定位核心问题:

  • Windows系统的文件名绝对不允许包含/,你的PIN值里带有/,系统会把它当成路径分隔符,误以为要在0001-87L58这个不存在的文件夹下创建1.eps,因此触发了FileNotFoundError。
  • 原代码没有指定外部保存目录,默认会把文件存在脚本运行的当前目录,若要保存到其他位置,必须明确写出完整路径。

解决方案步骤

  1. 清理PIN中的非法文件名字符:把/替换成合法字符(比如_),同时可以批量处理其他常见非法字符(如: * ? " < > |)。
  2. 确保目标目录存在:如果指定的外部目录还没创建,先自动生成它,避免目录不存在导致的二次报错。
  3. 优化EPS生成逻辑:原代码两次调用qr.eps会重复写入同一个文件,把所有参数合并成一次调用更高效。

修改后的完整代码

import pymssql, pyqrcode, os

# 配置数据库连接信息
host = "myHost"
username = "Mine"
password = "mine#$"
database = "external"

# 配置QR Code保存的外部目录(自行修改为你需要的实际路径)
save_dir = r"D:\Generated_QR_Codes"

# 确保目标目录存在,不存在则自动创建
if not os.path.exists(save_dir):
    os.makedirs(save_dir)

# 连接数据库并查询数据
conn = pymssql.connect(host, username, password, database)
read_query = "SELECT * FROM dbo.M_tblPIN WHERE TI = 'A01'"
mycursor = conn.cursor()
mycursor.execute(read_query)
result = mycursor.fetchall()

# 生成并保存QR Code
for item in result:
    PIN = item[12]
    # 批量清理所有Windows文件名非法字符
    invalid_chars = '<>:"/\\|?*'
    cleaned_pin = PIN
    for char in invalid_chars:
        cleaned_pin = cleaned_pin.replace(char, '_')
    
    # 拼接完整的保存路径(自动适配系统路径分隔符)
    save_path = os.path.join(save_dir, f"{cleaned_pin}.eps")
    
    # 生成QR Code并一次性写入所有参数
    qr = pyqrcode.create(PIN)
    print(qr)
    qr.eps(save_path, scale=5, module_color='#36C', background='#eee')

# 关闭数据库连接
conn.close()

关键改动说明

  • 使用os.path.join()拼接路径:自动适配Windows的\路径分隔符,避免手动拼接时出现格式错误。
  • 批量替换非法字符:覆盖所有Windows禁止的文件名字符,避免后续遇到其他类似报错。
  • 合并qr.eps()调用:把scale、module_color、background参数放在一次调用里,既避免重复写入文件,也让代码更简洁。

内容的提问来源于stack exchange,提问作者Shegmatech

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 21:17:43