기존 MySQL 데이터베이스의 리버스 엔지니어 SQLALCHEMY 선언 클래스 정의?
-
07-07-2019 - |
문제
약 50 개의 테이블이 포함 된 기존 MySQL 데이터베이스가 있습니다.
손으로 코드 대신 선언적 스타일의 sqlalchemy 클래스 (여기에 표시된대로) 각 테이블의 경우, MySQL 데이터베이스에 대해 실행할 수있는 도구/스크립트/명령이 있습니까? 생성하다 데이터베이스의 각 테이블에 대해 선언적 스타일의 파이썬 클래스?
다음과 같이 하나의 테이블 만 예제로 (이상적으로 50을 모두 생성 함)를 가져옵니다.
+---------+--------------------+
| dept_no | dept_name |
+---------+--------------------+
| d009 | Customer Service |
| d005 | Development |
| d002 | Finance |
| d003 | Human Resources |
| d001 | Marketing |
| d004 | Production |
| d006 | Quality Management |
| d008 | Research |
| d007 | Sales |
+---------+--------------------+
다음과 같은 내용이 포함 된 텍스트 파일을 생성 할 수있는 도구/스크립트/명령이 있습니까?
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Department(Base):
__tablename__ = 'departments'
dept_no = Column(String(5), primary_key=True)
dept_name = Column(String(50))
def __init__(self, dept_no, dept_name):
self.dept_no = dept_no
self.dept_name = dept_name
def __repr__(self):
return "<Department('%s','%s')>" % (self.dept_no, self.dept_name)
해결책
사용 sqlautocode:
기존 데이터베이스에서 모델을 자극하는 유연한 도구입니다.
이것은 약간 다른 접근법입니다 SQLSOUP, 테이블을 명시 적으로 정의하지 않고 사용할 수 있습니다. 반면에 Sqlalutocode는 실제 Python 코드를 생성합니다.
다른 팁
이제 (2015 년) 아마 사용하고 싶을 것입니다. https://pypi.python.org/pypi/sqlacodegen 대신에!
선언은 반사 된 테이블과 함께 사용할 수 있습니다. 따라서 시작 시간이 큰 문제가되지 않으면이 작업을 수행 할 수 있습니다.
engine = create_engine('mysql://...')
meta = MetaData()
meta.reflect(bind=engine)
for table in meta.tables.values():
print """
class %s(Base):
__table__ = Table(%r, Base.metadata, autoload=True)
""" % (table.name, table.name)
그 오토 코드 외에는 아마도 갈 길입니다.
SQLSOUP 기존 SQL 스키마의 내성 매핑을 수행 할 수 있습니다.
제휴하지 않습니다 StackOverflow