2010-06-18 6 views
7

그래서 나는 install 테이블에서, 그래서 같이있어 어떤 결과가 있습니다SQLAlchemy의 : 다른 테이블에 쿼리 결과를 삽입

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

내가에이 같은 결과를 삽입하려는를 install_archive 테이블.

install-archive 개체를 정의한 다음 그 결과를 구문 분석하여 스키마를 복제하고 싶지 않기 때문에이 작업을 수행하는 방법에 대해서는 완전히 알지 못합니다. 나는 단지 을 반영하고 있기 때문에 나는 ORM을 사용하지 않는다고 믿는다. (적절한 용어인가?) 테이블을 쿼리하고 쿼리한다.

내가 볼 수있는 모든 자습서는 ORM을 사용합니다.

psudocode에, 그 일의 느린 방법은 다음과 같습니다 사전에

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

감사합니다!

+0

운동의 목적은 무엇인가 결과? – van

+0

Van, 나는'install' 테이블에서 몇 가지 검증을 시도하고 있으며 유효성을 검사하는 서브셋 만이'install_archive' 테이블에 전달되고 있습니다. 나는 이것이 단순한 것 "한 테이블에서 다른 테이블로 레코드를 옮기고 모든 레코드를 옮기는 것"이라고 확신하지만, 문서에서 그것을 수행하는 방법을 찾지 못하는 것 같습니다. 나는 계속 볼거야. – 0atman

+0

파이썬에서 (SA 사용) 정말로 MySQL에서 직접 할 필요가 없습니까? 왜? – van

답변

0

다음과 같이 할 수 있습니다 (필요에 맞게 SELECT 변경). 두 테이블의 구조가 같아야합니다.

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

원시 SQL없이 sqlalchemy 표현식을 사용하면 어떻게 될까요? – Hadrien

+0

SQLAlchemy를 사용하여 이와 같은 작업을 수행 할 수 있다고 생각하지 않습니다. 모든 데이터를 선택하고 루프를 통해 다른 테이블에 삽입 할 수는 있지만 이것은 비효율적입니다. 당신은 "SQLAlchemy way"를 수행하는 것에서 실제로 아무것도 얻지 못합니다. 이와 같은 SQL 문은 충분히 이식성이 있습니다. –

+0

나는 이것이 질문에 대답하지 않는다고 생각한다. –

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 

이 (PostgreSQL의 방언)

INSERT INTO install_archive (col1, col2) 
SELECT install.col1, install.col2 
FROM install; 
관련 문제