【发布时间】:2022-01-18 18:18:20
【问题描述】:
我想从表 A --> 表 B 中插入选择记录(在本例中,不同的“数据库”== 不同的表不必担心 ATTACH),其中 Table A 的列数少于Table B。额外的 B_Table 列 (col3) 也应该被填充。
我已经在 raw-SQL 中尝试过这个序列(通过 SQLAlch。):
1.) INSERTing A_Table 使用 engine.connect().execute(text)
text("INSERT INTO B_Table (col1, col2) SELECT col1, col2 FROM A_Table")
2.) UPDATEing B_Table w/ col3 带有 engine.connect()ion 的信息(所有新插入的记录都使用相同的标识符填充/更新,NewInfo)
text("UPDATE B_Table SET col3 = NewInfo WHERE B_Table.ID >= %s" % (starting_ID#_of_INSERT'd_records))
更有效的选择?
但这是非常低效的。 UPDATE 单个列的时间是 INSERT 的 4 倍。这似乎应该是INSERT 时间的一小部分。我想将总时间减少到~只是插入时间。
在没有INSERTing 后跟UPDATE 的情况下,将数据从一个表复制到另一个表的更好方法是什么?我正在考虑:
1.) SQLAlchemy session.query(A_Table),但不确定如何编辑该对象(对于col3),然后插入更新的对象而不加载所有A_Table 查询信息到 RAM(我理解 raw-SQL 的 INSERT 不行)。
【问题讨论】:
-
NewInfo 是字符串文字还是标识符?
-
@forpas 抱歉,NewInfo 是一个字符串
标签: python sql sqlite sqlalchemy sql-insert