База данных dJango Production and Test Проверка качества данных
Я хочу создать проверку качества данных между нашей производственной средой и средой разработки.
Это необходимо для того, чтобы убедиться, что шаблоны наших систем настроены одинаково, в базу данных не будут записываться данные только для чтения
модели таковы:
class Plan(models.Model):
DatabaseOperations.max_name_length = lambda s: 40
# Define fields that match the columns in your existing table
PROJECT_CODE = models.TextField(primary_key=True)
PROJECT_NAME = models.TextField()
IS_TEMPLATE_PROJECT = models.TextField()
PLANTYPE = models.TextField()
ABR_SUPP_BY_SSG = models.TextField()
class Meta:
db_table = '\"schema\".\"table\"' # specify the schema and table name
managed = False # Prevent Django from managing the table schema
def __str__(self):
return self.PROJECT_NAME
class Activity(models.Model): DatabaseOperations.max_name_length = lambda s: 40
# Define fields that match the columns in your existing table
ACTIVITY_ID = models.TextField(primary_key=True)
PROJECT_CODE = models.ForeignKey(Plan, on_delete=models.DO_NOTHING, db_column='PROJECT_CODE', related_name='activities')
ACTIVITY_NAME = models.TextField()
LINE_IDENTIFIER = models.IntegerField()
class Meta:
db_table = '\"schamea\".\"table\"' # specify the schema and table name
managed = False # Prevent Django from managing the table schema
def __str__(self):
return self.ACTIVITY_NAME
Я использую HTML-форму, чтобы позволить пользователям выбрать базу данных для использования (больше будет добавлено позже
). <form method="GET" action="{% url 'list_plans' %}">
<label for="Databases">Choose Databases:</label><br>
<input type="checkbox" id="db1" name="databases" value="db1">
<label for="db1">Production</label><br>
<input type="checkbox" id="db2" name="databases" value="db2">
<label for="db2">Test</label><br>
<button type="submit">Load Plans</button>
</form>
Из моего представления я получаю def list_plans(request): # Определяем имена баз данных для производства и тестирования selected_databases = request.GET.getlist('databases')
try:
PlanModel = apps.get_model('compareTemplate', 'Plan')
ActivityModel = apps.get_model('compareTemplate', 'Activity')
combined_plans = []
for database_name in selected_databases:
# region Prefetch activities for each plan and filter on templates
activities_prefetch = Prefetch('activities', queryset=ActivityModel.objects.using(database_name))
# Apply filter for IS_TEMPLATE_PROJECT = 'true' and prefetch related activities
filtered_plans = PlanModel.objects.using(database_name).filter(IS_TEMPLATE_PROJECT='true').prefetch_related(activities_prefetch)
# region Prepare the plan data with field names and values
for plan in filtered_plans:
activities_data = [
{'fields': get_fields_and_values(activity)}
for activity in plan.activities.all()
]
plan_data = {
'database': database_name,
'fields': get_fields_and_values(plan),
'activities': activities_data
}
combined_plans.append(plan_data)
Теперь мне нужно сравнить поля в моей таблице (db1) prod.Plans с моей таблицей (db2) test.Plans
этот код добавляет их, но мне нужно соединить их
Соединение будет происходить на PROJECT_CODE и LINE_INDENTIFIER в таблице activities и PROJECT_CODE в таблице plans.
В конечном итоге я хочу получить html-вывод следующего содержания
project_name table field line_number prod_value test_value
Я новичок в python, мне потребовалась неделя, чтобы разобраться с этим, пожалуйста, будьте добры :)
У меня нет доступа к БД как у администратора и не будет, и мы не можем создать связь между двумя БД из-за политики
Спасибо