2009-09-15 16 views
20

मेरे पास एक पूर्व-मौजूदा mysql डेटाबेस है जिसमें लगभग 50 टेबल हैं।मौजूदा MySQL डेटाबेस से रिवर्स इंजीनियर SQLAlchemy घोषणात्मक श्रेणी परिभाषा?

बल्कि हाथ कोड की तुलना में एक कथात्मक शैली SQLAlchemy वर्ग (as shown here) प्रत्येक तालिका के लिए, वहाँ एक उपकरण/लिपि/कमांड मैं 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) 
+0

यह एक अच्छा उदाहरण है कि आपको SQL जेनरेटर से क्यों बचना चाहिए :)। –

+11

ओह ऐसा क्यों होगा? – zzzeek

उत्तर

28

उपयोग sqlautocode:

यह एक मौजूदा डेटाबेस से एक मॉडल autogenerate करने के लिए एक लचीला उपकरण है।

यह SqlSoup पर थोड़ा अलग दृष्टिकोण है, जो आपको स्पष्ट रूप से परिभाषित किए बिना तालिकाओं का उपयोग करने देता है। दूसरी ओर, sqlalutocode वास्तविक पायथन कोड उत्पन्न करेगा।

+0

शानदार, धन्यवाद –

+0

sqlautocode नवीनतम रिलीज 2010 को था, और यह नवीनतम sqlalchemy के साथ काम नहीं कर रहा है। क्या कोई और मौजूदा विकल्प है? – goncalopp

+7

@goncalopp: हां, [sqlacodegen] (https://pypi.python.org/pypi/sqlacodegen) – Pakman

4

SqlSoup मौजूदा SQL स्कीमा का आत्मनिर्भर मैपिंग कर सकता है।

+0

हां, लेकिन यह पायथन 3 का समर्थन नहीं करता है। मैं इसे बंद करने की कोशिश कर रहा हूं। –

6

ध्यान में रखें प्रतिबिंबित तालिकाओं के साथ घोषणात्मक का उपयोग किया जा सकता है। तो यदि स्टार्टअप समय कोई बड़ा मुद्दा नहीं था तो आप यह कर सकते थे:

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) 

उस ऑटोकोड के अलावा शायद जाने का तरीका है।

5

अब (2015 में) आप शायद https://pypi.python.org/pypi/sqlacodegen का उपयोग करना चाहेंगे!

+0

मेरे लिए कक्षाएं नहीं बनाते हैं, बस टेबल उदाहरण। – lfk

संबंधित मुद्दे