#python #class #reflection #sqlalchemy
#питон #класс #отражение #sqlalchemy
Вопрос:
Я новичок в алхимии, поэтому простите меня, если это основной вопрос. У меня есть табличные классы, которые отражены из существующей базы данных, и я хотел бы сохранить их в отдельном файле. Прямо сейчас у меня есть свои классы в верхней части моего основного приложения:
engine = create_engine('mysql://' user ':' passwd '@' database, echo = False)
meta_data = MetaData(bind = engine, reflect = True)
Base = declarative_base()
class Table_1(Base):
__table__ = Table('node_lmp', meta_data, autoload=True)
def __init__(self, name):
self.name = name
class Table2(Base):
__table__ = Table('type_lmp', meta_data, autoload=True)
def __init__(self, data, name):
self.data = data
self.name = name
Rest of application...
Я не уверен, как я могу экспортировать эти классы в отдельный модуль, поскольку они полагаются на метаданные из установленного соединения.
Я пытался экспериментировать с DeferredReflection безрезультатно. Я немного запутался в этом.
Ответ №1:
Например, давайте представим структуру каталогов следующим образом:
MainDir/
__init__.py
main.py
modelsDir/
__init__.py
meta.py
modelA.py
Если вы хотите создать программу на Python из нескольких файлов, вам нужно __ init__.py -файл, оставьте его пустым. Он упаковывает другие файлы python, чтобы ваш main.py может их использовать, и они доступны для вызова.
В вашем meta.py вы можете сохранить эти переменные engine, meta_data и Base такими, какие они есть в вашем основном файле. В modelA.py вы можете вызвать эти метаданные следующим образом:
from MainDir.modelsDir.meta import {
engine,
meta_data,
Base
}
Импорт этих таблиц в main-file происходит точно так же, как описано выше. Более подробную информацию об импорте смотрите здесь: https://docs.python.org/2/tutorial/modules.html Вы можете импортировать переменные (движок и т.д.) И классы таким же образом.