From ce7dfd65101bb412345c7e287655fdc434cd4623 Mon Sep 17 00:00:00 2001 From: Philip Sargent Date: Thu, 21 Jul 2022 21:01:57 +0300 Subject: [PATCH] working on MariaDB crash on server --- databaseReset.py | 4 ++++ parsers/caves.py | 11 +++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/databaseReset.py b/databaseReset.py index 1d8427b..ae1ea55 100644 --- a/databaseReset.py +++ b/databaseReset.py @@ -89,11 +89,15 @@ def reinit_db(): else: print(" - No database file found: " + currentdbname + " ..continuing, will create it.\n") else: + print(f" - Attempting to nuke : {currentdbname}\n") + # this is now completely failing to nuke MariaDB adequately, and it crashes when creating Area objects with a no null parent message + # when null parents are explciitly allowed in the model. cursor = django.db.connection.cursor() cursor.execute("DROP DATABASE %s" % currentdbname) cursor.execute("CREATE DATABASE %s" % currentdbname) cursor.execute("ALTER DATABASE %s CHARACTER SET=utf8" % currentdbname) cursor.execute("USE %s" % currentdbname) + print(f" - Nuked : {currentdbname}\n") print(" - Migrating: " + django.db.connections.databases['default']['NAME']) diff --git a/parsers/caves.py b/parsers/caves.py index 91f353a..feb0f83 100644 --- a/parsers/caves.py +++ b/parsers/caves.py @@ -12,6 +12,9 @@ from troggle.core.models.caves import Area, Cave, Entrance, CaveSlug, EntranceSl '''Reads all the cave description data by parsing the xml files (stored as e.g. :EXPOWEB:/cave_data/1623-161.html ) and creating the various Cave, Entrance and necessary Area objects. +This is the first import that happens after the dabase is reinitialised. +So is the first thing that creates tables. + BUT in Django 2.0 and later we cannot do any queries on data we have just entered because this is all happening inside one transaction. Bummer. @@ -184,8 +187,12 @@ def readcaves(): print(" - Creating Areas 1623 and 1626") # This crashes on the server with MariaDB even though a null parent is explicitly allowed. - area_1623= Area.objects.create(short_name = "1623") - area_1626= Area.objects.create(short_name = "1626") + area_1623= Area.objects.create(short_name = "1623", parent=None) + print(" - Saving Area 1623") + area_1623.save() + area_1626= Area.objects.create(short_name = "1626", parent=None) + print(" - Saving Area 1626") + area_1626.save() print (" - Setting pending caves") # Do this first, so that these empty entries are overwritten as they get properly created.