如何在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()
你之前写法的问题分析
第一种写法错误:
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)第二种写法错误:
你把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
相关产品推荐
相关产品推荐

