기존 MySQL 데이터베이스의 리버스 엔지니어 SQLALCHEMY 선언 클래스 정의?

StackOverflow https://stackoverflow.com/questions/1425412

  •  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 스키마의 내성 매핑을 수행 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top