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

如何在Python的SQLite3中从另一表向目标表插入指定列数据?

解决方法

你原来的MySQL语句几乎可以直接在SQLite3中使用,SQLite支持INSERT ... SELECT的批量插入语法,不需要拆分成两步操作。

正确的Python + SQLite3代码

import sqlite3

# 连接数据库
conn = sqlite3.connect('你的数据库文件名.db')
cur = conn.cursor()

# 直接执行INSERT...SELECT,注意列名要和两张表对应
cur.execute('''
INSERT INTO portfolio (ticker, quantity, price)
SELECT ticker, quantity, price FROM transactions
''')

# 提交更改并关闭连接
conn.commit()
conn.close()

你之前写法的问题分析

  1. 第一种写法错误:
    cur.execute('select ...')返回的是游标对象,不是查询到的数据列表。如果非要用VALUES+参数的方式,需要先获取所有数据,再用executemany批量插入(但效率不如直接用INSERT...SELECT):

    cur.execute('SELECT ticker, quantity, price FROM transactions')
    transaction_rows = cur.fetchall()
    cur.executemany('INSERT INTO portfolio (ticker, quantity, price) VALUES (?, ?, ?)', transaction_rows)
    
  2. 第二种写法错误:
    你把SELECT语句当成字符串参数传给VALUES,数据库会把这个字符串当作普通的字段值插入,而不会执行这个查询,这完全不符合预期。

注意事项

  • 确保两张表的列名对应正确:你的portfolio表列是ticker、quantity、price,所以INSERT语句里的列名要和SELECT出来的列一一对应(transactions的ticker→portfolio.ticker,transactions.quantity→portfolio.quantity,transactions.price→portfolio.price)。
  • 执行完INSERT后一定要调用conn.commit(),否则更改不会保存到数据库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 07:05:20