Python 有没有一种方法可以使用Django指定SQL表概念的列的创建顺序?
我现在正在用Django模型复制一个旧的postgresql数据库。数据库的第一个版本有一些脚本来计算数据以填充表 我要插入表中的数据格式为TSV文件:Python 有没有一种方法可以使用Django指定SQL表概念的列的创建顺序?,python,sql,django,postgresql,django-models,Python,Sql,Django,Postgresql,Django Models,我现在正在用Django模型复制一个旧的postgresql数据库。数据库的第一个版本有一些脚本来计算数据以填充表 我要插入表中的数据格式为TSV文件:value1\tvalue2\value3。接下来将使用SQL命令\copy my_table from'path/to/my/file.tsv',null作为'null'插入它们 因为脚本定义了TSV文件中数据的顺序,所以我的字段必须以表中相同的顺序创建。问题是Django似乎将外键设置到了表的末尾 此模型示例如下: class My_tabl
value1\tvalue2\value3
。接下来将使用SQL命令\copy my_table from'path/to/my/file.tsv',null作为'null'
插入它们
因为脚本定义了TSV文件中数据的顺序,所以我的字段必须以表中相同的顺序创建。问题是Django似乎将外键设置到了表的末尾
此模型示例如下:
class My_table(models.Model):
field1 = models.CharField(primary_key=True, max_length=25)
field2 = models.ForeignKey(....)
field3 = models.IntegerField(blank=True, null=True)
field4 = models.CharField(max_length=2000, blank=True, null=True)
可以给出如下表格:
field1 | field3 | field4 | field2
--------+--------+--------+--------
我想要这个:
field1 | field2 | field3 | field4
--------+--------+--------+--------
是否有办法获得此结果?如果使用内置的Django迁移,实际上可以对迁移文件中定义的
字段重新排序,以更改在数据库中创建列的顺序
你应该有类似的东西:
# 0001_initial.py
class Migration(migrations.Migration):
....
operations = [
migrations.CreateModel(
# the fields here can be re-ordered
fields=[
('id', ...),
('field1', ....),
('field2', ....),
('field3', ....),
('field4', ....),
]
)
]
您可以使用python manage.py sqlmigrate appname 0001
打印将要执行的SQL:
CREATE TABLE "my_table" ("id", ....);
请注意,无论字段顺序如何,Django都会强制将“id”作为表中定义的第一列。如果使用内置的Django迁移,实际上可以对迁移文件中定义的字段重新排序,以更改在数据库中创建列的顺序
你应该有类似的东西:
# 0001_initial.py
class Migration(migrations.Migration):
....
operations = [
migrations.CreateModel(
# the fields here can be re-ordered
fields=[
('id', ...),
('field1', ....),
('field2', ....),
('field3', ....),
('field4', ....),
]
)
]
您可以使用python manage.py sqlmigrate appname 0001
打印将要执行的SQL:
CREATE TABLE "my_table" ("id", ....);
请注意,不管字段顺序如何,Django都会强制将“id”作为表中定义的第一列。我必须手动修改Django的迁移结果吗?如果我必须编写一个脚本来执行这个中间操作,那么这是一个复杂的解决方案。如果我必须重新部署数据库模型,那么在第一次迁移期间的新步骤似乎是一个困难。。。在模块设置或模型参数中,我没有遗漏任何其他信息?在我对Django 1.9.1的测试中,字段的定义顺序与数据库中列的顺序相同。您使用的是什么版本的Django,使用的是什么数据库?我现在正在使用Django 1.9.0和Postgresql 9.3.9以及Python3.4.3I,老实说,我只是手工修改初始迁移。如果重新部署,您将不会生成新的迁移(您将重新使用您修改的迁移)。如果您有数百个表,那么您可能会考虑使用旧的数据库来生成新数据库的模式,并且只使用“代码> >伪初始的参数运行迁移。我刚刚注意到,在我的例子中,问题只发生在外键上(如果外键不也用作主键的话)。它们被移动到表的末尾。我必须手动修改django的迁移结果吗?如果我必须编写一个脚本来执行这个中间操作,那么这是一个复杂的解决方案。如果我必须重新部署数据库模型,那么在第一次迁移期间的新步骤似乎是一个困难。。。在模块设置或模型参数中,我没有遗漏任何其他信息?在我对Django 1.9.1的测试中,字段的定义顺序与数据库中列的顺序相同。您使用的是什么版本的Django,使用的是什么数据库?我现在正在使用Django 1.9.0和Postgresql 9.3.9以及Python3.4.3I,老实说,我只是手工修改初始迁移。如果重新部署,您将不会生成新的迁移(您将重新使用您修改的迁移)。如果您有数百个表,那么您可能会考虑使用旧的数据库来生成新数据库的模式,并且只使用“代码> >伪初始的参数运行迁移。我刚刚注意到,在我的例子中,问题只发生在外键上(如果外键不也用作主键的话)。它们被移动到桌子的末端。