Я создаю набор сценариев полного копирования базы данных SQL, используя MySQL INTO OUTFILE и LOAD DATA LOCAL INFILE.
В частности:
SELECT {columns} FROM {table} INTO OUTFILE '{table}.csv'
LOAD DATA LOCAL INFILE '{table}.csv' REPLACE INTO {table} {columns}
Из-за этого мне не нужны только таблицы, мне также нужны столбцы для таблиц.
Я могу получить все таблицы и столбцы, но это не относится к таблицам m2m:
from django.db.models import get_models()
for model in get_models():
table = model._meta.db_table
columns = [field.column for field in model._meta.fields]
Я также могу получить все таблицы, но это не дает мне доступ к столбцам:
from django.db import connection
tables = connection.introspection.table_names()
Как вы получаете каждую таблицу и каждый соответствующий столбец в этой таблице для проекта Django?
Подробнее:
Я делаю это на достаточно большом наборе данных (> 1 ГБ), поэтому использование плоского файла *1019* метод представляется единственным разумным способом сделать такой большой размер копии в MySQL. У меня уже есть скопированная схема (с использованием ./manage.py syncdb --migrate), и проблема, с которой я столкнулся, связана именно с копированием данных, которое требует от меня наличия таблиц и столбцов для создания правильных операторов SQL. Кроме того, причина, по которой я не могу использовать порядок столбцов по умолчанию, состоит в том, что производственная база данных, из которой я копирую, имеет порядок столбцов, отличный от того, который создается с помощью новой syncdb (из-за миграций и изменений схемы за многие месяцы).