Я пытаюсь понять, как реализовать массовую вставку в сценарии отношений «многие ко многим» для создания сокращенной аналитической базы данных (на данный момент с использованием SQLite3) при нормализации повторяющихся данных. Вот соответствующие классы модели:
Код: Выделить всё
class BaseModel(Model):
class Meta:
database = ServiceLocator().getDatabase()
legacy_table_names=False
class LogEntry(BaseModel):
Id = AutoField()
Level = ForeignKeyField(Level)
File = ForeignKeyField(File, on_delete='CASCADE')
Host = ForeignKeyField(Host)
Date = DateTimeField()
Contents = ManyToManyField(ContentDetail, backref="Entries")
LineNumber = IntegerField()
class ContentDetail(BaseModel):
Id = AutoField()
PropertyName = TextField(index=True)
PropertyValue = TextField(null=True, default=None)
ValueSizeInBytes = BigIntegerField()
Код: Выделить всё
def main() -> None:
locator = ServiceLocator()
logger = locator.getLogger()
try:
with locator.getDatabase() as db:
ContentDetailLogEntry = LogEntry.Contents.get_through_model() #
[code](propName:str, propVal:str, lenght:int) : []:LogEntry
Код: Выделить всё
(...)
with self.__resolver.getDatabase().atomic():
with open(fileEntity.FileOrigin, mode="r", encoding="utf-8") as logFile:
(...)
for tuple in self.__contentCache.keys():
for entry in self.__contentCache[tuple]:
entry.Contents.add(ContentDetail.create(PropertyName=tuple[0], PropertyValue=tuple[1], ValueSizeInBytes=tuple[2]))
self.__logger.debug(f"Created content for {entry.LineNumber}")
(...)
Может быть, мой подход неправильный. Любые предложения приветствуются
Подробнее здесь: https://stackoverflow.com/questions/781 ... peewee-orm