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

为什么我的SQLite数据库TICKER列所有值都被填充为None?

问题原因及修复方案

问题原因

你对INSERT语句的作用理解错误:INSERT操作是新增数据表行,而非修改已有的行。

  • 第一次遍历url_list插入数据时,每执行一次INSERT就会生成1条新行,这些行仅URL字段有赋值,TICKER字段未传值所以默认是NULL,STATUS字段使用默认值Not started,这一步会生成和url_list长度一致的新行。
  • 第二次遍历ticklist插入数据时,依然使用INSERT操作,会再生成和ticklist长度一致的新行,这些行仅TICKER字段有赋值,URL字段默认是NULL。
    你查询返回的结果是第一次插入的URL行,所以所有行的TICKER字段都显示为None。

修复方案

正常业务中URL和对应TICKER是一一对应的,直接修改插入逻辑,每次插入同时赋值URL和TICKER两个字段即可,修复后代码如下:

import sqlite3
conn = sqlite3.connect('tickers.db')
# 建表时指定字段类型使用更规范
conn.execute('''CREATE TABLE TAB(URL TEXT, TICKER TEXT, STATUS TEXT DEFAULT "Not started");''')

# 两个列表按位置配对,一次插入两个字段
for url, ticker in zip(url_list, ticklist):
    conn.execute("INSERT INTO TAB(URL, TICKER) VALUES(?, ?)", (url, ticker))

# 提交事务,否则数据不会持久化保存到数据库文件
conn.commit()

for row in conn.execute("SELECT URL, TICKER, STATUS from TAB"):
    print(f'URL={row[0]}')
    print(f'TICKER={row[1]}')
    print(f'STATUS={row[2]}')

# 操作完成后关闭连接
conn.close()

如果确实存在先批量插入URL,后续再补录对应TICKER的场景,需要给数据表新增自增主键字段,插入URL时记录对应主键ID,后续通过主键ID匹配行执行UPDATE操作修改TICKER字段的值即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 11:27:02