我正在使用MySQL的INTO OUTFILE和LOAD DATA LOCAL INFILE创建一组SQL完整数据库副本脚本.
特别:
SELECT {columns} FROM {table} INTO OUTFILE '{table}.csv'
LOAD DATA LOCAL INFILE '{table}.csv' REPLACE INTO {table} {columns}
Run Code Online (Sandbox Code Playgroud)
因此,我不仅需要表格,我还需要表格的列.
我可以获取所有表和列,但这不包括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]
Run Code Online (Sandbox Code Playgroud)
我也可以获取所有表,但这不会让我访问列:
from django.db import connection
tables = connection.introspection.table_names()
Run Code Online (Sandbox Code Playgroud)
如何为Django项目获取该表上的每个表和每个相应列?
更多细节:
我在一个相当大的数据集(> 1GB)上这样做,所以使用平面文件方法似乎是在MySQL中制作这么大的副本的唯一合理方法.我已经复制了模式(使用./manage.py syncdb --migrate),而我遇到的问题是复制数据,这要求我使用表和列来创建正确的SQL语句.此外,我不能使用默认列排序的原因是因为我正在复制的生产数据库具有与使用新syncdb创建的不同的列顺序(由于数月的迁移和模式更改).
你看过manage.py了吗?
您可以获取大量SQL信息,例如,为您的项目中的应用程序获取所有创建表语法:
python manage.py sqlall <appname>
Run Code Online (Sandbox Code Playgroud)
如果输入:
python manage.py help
Run Code Online (Sandbox Code Playgroud)
你可以看到很多其他功能.