Я только начинаю изучать SQL Алхимия, и для моего первого проекта моя цель - создать два отдельных файла БД SQLITE, каждый с одной таблицей. С первой попытки я попытался сделать следующее:
Base = declarative_base()
class HostInfo(Base):
__tablename__ = 'hosts'
id = Column(Integer, primary_key = True)
...
host_info_engine = create_engine('sqlite:///hostinfo.db', echo=False)
Base.metadata.create_all(host_info_engine)
class RecoveryLogger(Base):
__tablename__ = 'recovery_entries'
id = Column(Integer, primary_key=True)
....
recovery_log_engine = create_engine('sqlite:///recovery_logger.db', echo=False)
Base.metadata.create_all(recovery_log_engine)
По большей части это сработало, но одним из непреднамеренных побочных эффектов было то, что он создал две таблицы в hostinfo.db , и это не то, что я хотел - я хотел только одну таблицу в каждом из файлов базы данных. После нескольких царапин на голове я смог осмотреть Base и обнаружил, что он содержит все столбцы из обоих моих объявлений класса. Я решил исправить это, вставив еще один оператор Base = Declarative_base () перед объявлением второго класса ( RecoveryLogger ), и это, похоже, решило проблему.
Это отбросило меня за все oop, потому что я не думал, что информация из дочернего класса вернется обратно в родительский класс, но кажется, что это так, или, по крайней мере, Base кажется быть каким-то особым объектом, который захватывает все детали из любого класса, основанного на нем.
Итак, каков правильный путь к go по этому поводу? Правильно ли вставил второй оператор Base = Declarative_base () ? go? Должен ли я использовать другое имя (вместо Base ) для каждого назначения Declarative_base ()?
Спасибо!