عكس مهندس SQLAlchemy تعريف الفئة المعلن من قاعدة بيانات MySQL الحالية؟
-
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)
المحلول
وإنما هي أداة مرنة لالإنشاء التلقائي نموذج من قاعدة بيانات موجودة.
وهذا هو نهج مختلف قليلا ل 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 الحالية.