Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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迁移重新排序列_Python_Django_Migrate - Fatal编程技术网

Python Django迁移重新排序列

Python Django迁移重新排序列,python,django,migrate,Python,Django,Migrate,我一直很困惑,如果在Django中迁移时有任何方法可以对列进行排序,首先在我的例子中,我的模型中没有is_person,然后最终我想在我的模型中付费后添加is_person,如models.py中的示例所示,然后问题是,即使我在迁移时正确地对模型中的值进行了排序,is\u person始终转到最后一个。有没有什么诀窍可以在支付后添加列而不删除整个数据库 Models.py Django并不关心列的顺序,一些SQL数据库似乎也不太担心。在某些SQL方言(如MySQL)中,您确实可以使用以下命令指

我一直很困惑,如果在Django中迁移时有任何方法可以对列进行排序,首先在我的例子中,我的模型中没有
is_person
,然后最终我想在我的模型中付费后添加
is_person
,如models.py中的示例所示,然后问题是,即使我在迁移时正确地对模型中的值进行了排序,
is\u person
始终转到最后一个。有没有什么诀窍可以在支付后添加列而不删除整个数据库

Models.py


Django并不关心列的顺序,一些SQL数据库似乎也不太担心。在某些SQL方言(如MySQL)中,您确实可以使用以下命令指定“插入点”:

ALTER table table\u name在其他\u列之后添加列my\u COLUMN INTEGER
但这不是标准化的SQL。例如,对于SQL server,实现这一点的唯一方法似乎是通过


列的顺序也是“实现细节”。数据库不是用来呈现输出的,而是用来存储、检索和聚合数据的。

不,Django不关心列顺序,例如,就我所知,对于SQL server来说,唯一的方法是创建一个顺序正确的新表,然后“复制”来自旧数据库的数据:有些数据库允许在任意位置插入列,但无论如何,这并不重要。如果您切换select语句中的列,它将以另一个顺序获取这些列。感谢您的响应,但这是添加alter table的正确方法吗?支付后将错误返回mysql
ALTER table app_person ADD列为_person VARCHAR(25)现在可以工作了,如果我的django应用程序recognize@MarkLogan:您将需要在添加字段的位置伪造迁移,例如,通过更改最初构建表的迁移文件,从现在起,它的目标当然是添加一个额外的列。但在我在mysql中添加alter table之后,是否有必要在模型中添加
added\u column
?然后迁移?@MarkLogan:Django不会查看特定的数据库来构建迁移文件(或迁移),因为迁移需要同时应用于原始数据库和以后的生产数据库。它只会在运行迁移时显示这种模型的样子。因此,它将确定仍然需要添加另一列。
class Person(models.Model):
    covid_id = models.CharField(max_length=50,blank=True, null=True)

    is_person = models.CharField(max_length=50,blank=True, null=True)  // I want to add this
    
    paid_by = models.CharField(max_length=50,blank=True, null=True) 
    date_receive = models.DateField(null=True, blank=True)
    remarks = models.CharField(max_length=1500,blank=True, null=True)
    eligible = models.CharField(max_length=50,blank=True, null=True)
    amount_paid = models.CharField(max_length=60,blank=True, null=True)
ALTER table table_name ADD COLUMN my_column INTEGER AFTER other_column