عكس مهندس SQLAlchemy تعريف الفئة المعلن من قاعدة بيانات MySQL الحالية؟

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

  •  07-07-2019
  •  | 
  •  

سؤال

ولدي قاعدة بيانات الخلية موجودة مسبقا تحتوي على حوالي 50 الجداول.

وبدلا من كود يد التعريفي الطبقة أسلوب SqlAlchemy (<لأ href = "http://www.sqlalchemy.org/docs/05/ormtutorial.html#creating-table-class-and-mapper-all-at- مرة واحدة إلزامي "يختلط =" noreferrer "> كما هو موضح هنا ) لكل جدول، هناك أداة / النصي الأمر / I يمكن تشغيلها على قاعدة بيانات الخلية التي من شأنها أن <م> توليد فئة الثعبان في أسلوب التعريفي لكل جدول في قاعدة البيانات؟

لاتخاذ طاولة واحدة فقط كمثال (من شأنه أن يولد لجميع 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 إنشاء رمز الثعبان الفعلي.

نصائح أخرى

والآن (في عام 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)

وبخلاف ذلك autocode ربما هو الطريق للذهاب.

SqlSoup يمكن أن تؤدي رسم ذاتي لمخطط SQL الحالية.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top