2010-06-18 66 views
7

Vì vậy, tôi có một số kết quả mà tôi đã nhận được từ bảng install, như vậy:SQLAlchemy: Chèn các kết quả của một truy vấn vào bảng khác

install = metadata.tables['install'] 
results = session.query(install) #<sqlalchemy.orm.query.Query object> 

Tôi muốn chèn những kết quả tương tự vào install_archive bảng.

Tôi không hoàn toàn chắc chắn cách thực hiện điều này, vì tôi không muốn sao chép lược đồ bằng cách xác định đối tượng install-archive và sau đó phân tích cú pháp kết quả vào đó. Tôi tin rằng tôi không sử dụng ORM, bởi vì tôi chỉ là phản ánh (là cụm từ đúng không?) Các bảng và truy vấn chúng.

Tất cả các hướng dẫn tôi có thể thấy sử dụng ORM.

Một cách chậm để làm việc đó, trong psudocode, sẽ là:

for id in result.all(): 
    install_archive.insert(install(id)) 

Cảm ơn trước!

+0

mục đích của cuộc tập trận là gì? – van

+0

Van, tôi đang cố thực hiện một số xác thực trên bảng 'install', và chỉ tập hợp con hợp lệ mới được chuyển tới bảng' install_archive'. Tôi chắc chắn đây là một điều đơn giản "di chuyển một số hồ sơ từ một bảng khác, nhưng không phải tất cả" nhưng tôi dường như không thể tìm thấy một cách để làm điều đó trong các tài liệu. Tôi sẽ tiếp tục tìm kiếm. – 0atman

+0

bạn có chắc chắn rằng bạn cần phải làm điều đó trong python (sử dụng SA), và không trực tiếp trong MySQL? Tại sao? – van

Trả lời

0

Bạn có thể làm điều gì đó như thế này (thay đổi SELECT để phù hợp với nhu cầu của bạn). Chỉ cần chắc chắn rằng hai bảng có cùng cấu trúc.

INSERT INTO `table1` (SELECT * FROM `table2`); 
+0

Làm thế nào bạn sẽ làm điều này mà không có sql thô nhưng với một biểu thức sqlalchemy? – Hadrien

+0

Tôi không tin rằng bạn có thể làm điều gì đó khá giống với SQLAlchemy. Bạn có thể chọn tất cả các dữ liệu, sau đó lặp lại và chèn vào bảng khác, nhưng điều này sẽ không hiệu quả khủng khiếp. Bạn không thực sự đạt được bất cứ điều gì từ làm nó "cách SQLAlchemy". Một câu lệnh SQL như thế này là đủ di động. –

+0

Tôi không nghĩ rằng điều này trả lời câu hỏi. –

5
install_archive \ 
.insert() \ 
.from_select(names=['col1', 'col2'], # array of column names that your query returns 
      select=session.query(install)) # your query or other select() object 

Điều này dẫn đến (PostgreSQL phương ngữ)

INSERT INTO install_archive (col1, col2) 
SELECT install.col1, install.col2 
FROM install; 
Các vấn đề liên quan