2009-05-15 3 views
7

내가 engine는 MySQL 데이터베이스 가리키는 있다고 가정 들어있는 SQL 파일을 생성 할 수있는 간단한 방법이 있을까요SQLAlchemy에서 엔진의 SQL 언어에서 DDL로 파일을 생성하는 방법은 무엇입니까?

metadata.create_all(engine) 

:

engine = create_engine('mysql://arthurdent:[email protected]/dtdb', echo=True) 

나는에 의해 등 테이블, FKS와 dtdb을 채울 수 있습니다 실제로이 DDL 문을 dtdb에 적용하는 대신 모든 DDL 문을?

지금까지 나는 echo=True에 의해 생성 된 SQLAlchemy 로그 출력을 캡처하고 직접 편집했습니다. 그러나 그것은 너무 고통 스럽습니다.

SA에는 정교한 스키마 관리 API가있는 것처럼 보입니다. 그러나 스키마 정의를 텍스트로 스트리밍하는 예는 보지 못했습니다.

답변

13

빠른 대답은 SQLAlchemy 0.8 FAQ입니다.

은 SQLAlchemy의 0.8에서는 구문이 단순화 SQLAlchemy의 0.9에서

engine = create_engine(
'mssql+pyodbc://./MyDb', 
strategy='mock', 
executor= lambda sql, *multiparams, **params: print (sql.compile(dialect=engine.dialect))) 

할 필요가있다.

더 많은 답변을 얻으려면 출력 캡처에는 여전히 약간의 문제가 있습니다. 유형의 리터럴 인코딩과 비슷합니다. 그러나 이것은 누구나 가려움증을 딛고 긁을만큼 큰 문제는 아닙니다. SQLAlchemy가 프로그래밍 방식으로 빈 데이터베이스를 만들고 거기에서 SQL을 덤프 할 수 있습니다.

더 어려운 문제는 스키마 마이그레이션 처리입니다. 이것은 SQLAlchemy-migrate가 당신을 도울 수있는 곳입니다.

+0

FAQ 링크가 내가 필요한 것입니다. 감사합니다! :) 저는 스키마 관리와 같은 마이그레이션을 찾지 않았습니다. 간단히 말해, 엔진 에코 출력을 사용하지 않고 DDL을 가져 오는 간단한 해킹이 필요했습니다. –

+0

이것은 파이썬 0.9에서 변경된 것 같습니다. 또한 FAQ는 0.9에 존재하지 않는 것 같습니다. –

+0

SQLAlchemy 1.0.12에서 두 번째 구문이 작동하지 않습니다. https://groups.google.com/d/topic/sqlalchemy/r9neOsc64wc/discussion을 참조하십시오. –

관련 문제