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

Python3从SQL表取数据后无法写入文本文件的问题排查

解决无法写入TXT文件的问题

咱们一步步排查你的代码问题,先揪出几个关键的坑:

1. 文件打开模式的隐形问题

你用'w'模式打开文件,这个模式的特性是每次打开都会清空文件原有内容。如果只调用一次addepc(),文件里只会写入当前选中的那个值;如果多次调用,之前的内容会被完全覆盖,看起来就像没写入一样。

如果想保留历史内容,应该用'a'(追加)模式;如果想每次保存整个epcs字典的状态,那用'w'模式但要把所有键值对都写进去,而不是只写当前的一个值。

2. SQL查询的语法错误

第二个查询里的as float写法不对——你想把value转成浮点数,但这里误把表的别名设成了float,这会导致查询逻辑异常(虽然可能没报错,但获取到的数据可能不符合预期)。正确的写法应该是用CAST函数转换字段类型:

SELECT CAST(value AS FLOAT) FROM epcval5 WHERE epc='EPC{}'

3. 字典键的类型不匹配

你初始化epcs的时候用的是整数键(0-18),但input()返回的是字符串类型,所以epcs[epcNo] = res其实是在字典里新增了一个字符串键的条目,而不是覆盖你初始化的整数键。这不会直接导致写入失败,但逻辑上可能不符合你的预期,建议把输入转成整数并做范围校验。

4. 写入逻辑不完整

你现在只把当前选中的res写入文件,但epcs字典里的其他值并没有被保存。如果你的目标是把所有EPC的状态都写入文件,需要遍历字典把所有键值对都写进去。


修正后的代码示例

import sqlite3
import os

# 打印当前工作目录,方便找文件
print(f"当前工作目录:{os.getcwd()}")

db = sqlite3.connect("air2.sql")
cs = db.cursor()
# 用字典推导式初始化,更简洁
epcs = {i: 0 for i in range(19)}

def addepc():
    # 先处理输入验证,避免无效输入
    try:
        epcNo = int(input("EPC No:"))
        if epcNo not in epcs:
            print("EPC编号必须是0-18之间的数字哦!")
            return
    except ValueError:
        print("请输入有效的数字!")
        return

    # 查询完整数据
    query1 = "SELECT * FROM epcval5 WHERE epc='EPC{}'".format(epcNo)
    cs.execute(query1)
    data = cs.fetchone()
    if not data:
        print(f"找不到EPC{epcNo}的数据!")
        return
    
    print("你选中的EPC信息:")
    for item in data:
        print(item)

    # 修正后的查询,转换value为浮点数
    query2 = "SELECT CAST(value AS FLOAT) FROM epcval5 WHERE epc='EPC{}'".format(epcNo)
    cs.execute(query2)
    epcv = cs.fetchone()
    if not epcv:
        print(f"找不到EPC{epcNo}的数值!")
        return
    
    # 提取元组里的第一个元素并转成字符串
    res = str(epcv[0])
    print(f"转换后的数值类型:{type(res)}")

    # 更新字典
    epcs[epcNo] = res

    # 把整个字典写入文件,覆盖原有内容(确保保存最新状态)
    with open('epcs.txt', 'w', encoding='utf-8') as f:
        for key, value in epcs.items():
            f.write(f"EPC{key}: {value}\n")
    
    print("数据已经成功写入epcs.txt啦!")

addepc()
print("操作完成!按回车键继续...")
input()

# 关闭数据库连接,养成好习惯
db.close()

额外排查点(如果还是没看到文件)

  • 文件路径问题:我在代码里加了打印当前工作目录的代码,你可以看看文件是不是保存在这个路径下。
  • 权限问题:如果脚本运行的目录没有写入权限,可能会静默失败(不过通常Python会抛出错误),可以检查一下目录的读写权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:12:40