Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有没有一种方法可以使用Django指定SQL表概念的列的创建顺序?_Python_Sql_Django_Postgresql_Django Models - Fatal编程技术网

Python 有没有一种方法可以使用Django指定SQL表概念的列的创建顺序?

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

我现在正在用Django模型复制一个旧的postgresql数据库。数据库的第一个版本有一些脚本来计算数据以填充表

我要插入表中的数据格式为TSV文件:
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,老实说,我只是手工修改初始迁移。如果重新部署,您将不会生成新的迁移(您将重新使用您修改的迁移)。如果您有数百个表,那么您可能会考虑使用旧的数据库来生成新数据库的模式,并且只使用“代码> >伪初始的参数运行迁移。我刚刚注意到,在我的例子中,问题只发生在外键上(如果外键不也用作主键的话)。它们被移动到桌子的末端。