Ну первый вопрос возникает ... почему у тебя другая ситуация? почему ты не прописал релейшны?
Дай свои модели. Только в коде плиз а не в картинках
ЭТО КОД ПО ЗАППОЛНЕНИЮ
import argparse
import os
from pathlib import Path
from peewee import SqliteDatabase
from svv_report_main.models import Driver, StartLog, EndLog
from svv_report_main.svv_report import read_file, parse_abbr_lines, parsed_start_end_lines
DB_FILEPATH = 'database.db'
DRIVERS_FILENAME = 'abbreviations.txt'
START_FILENAME = 'start.log'
END_FILENAME = 'end.log'
def create_db():
if os.path.exists(DB_FILEPATH):
os.remove(DB_FILEPATH)
db = SqliteDatabase(DB_FILEPATH)
db.create_tables([Driver, StartLog, EndLog])
return db
def separate_data_to_dict(drivers, start, end):
drivers = [dict(zip(('driver', 'name', 'team'), driver)) for driver in drivers]
start = [dict(zip(('driver', 'time_start'), drive_start)) for drive_start in start]
end = [dict(zip(('driver', 'time_finish'), drive_end)) for drive_end in end]
return drivers, start, end
def get_data_from_files(path):
path_dir = Path(path).resolve()
drivers = parse_abbr_lines(read_file(path_dir / DRIVERS_FILENAME))
start = parsed_start_end_lines(read_file(path_dir / START_FILENAME))
end = parsed_start_end_lines(read_file(path_dir / END_FILENAME))
return separate_data_to_dict(drivers, start, end)
def store_data_to_db(db, data):
drivers, start, end = data
with db.atomic() as transaction:
drivers_id = {}
for driver in drivers:
driver_obj = Driver.create(driver)
drivers_id[driver_obj.driver] = driver_obj.id
for time in start:
StartLog.create({'time_start': time.get('time_start'), 'driver_id': drivers_id.get(time.get('driver'))})
for time in end:
EndLog.create(**{'time_finish': time.get('time_finish'), 'driver_id': drivers_id.get(time.get('driver'))})
def main(path):
db = create_db()
print('1. Read files')
data = get_data_from_files(path)
print('2. Store data into db')
store_data_to_db(db, data)
print('Done')
if name == 'main':
parser = argparse.ArgumentParser()
parser.add_argument('--path', nargs='?', type=str, const='build_report', required=True, help='folder path')
args = parser.parse_args()
main(args.path)