如何更改`id`字段的初始值?

时间:2018-06-11 12:59:06

标签: python mysql sql django

我有一个User模型,它生成了以下表格:

其中id从1增加。

我已经在一个咒语中使用了我的系统,现在我想要更改某个用户实例的id并从10000开始。

在数据库中我无法更改,它会报告错误:

Cannot delete or update a parent row: a foreign key constraint fails (`qy`.`usermanage_user_groups`, CONSTRAINT `usermana_user_id_53f44f10_fk_qy_adm` FOREIGN KEY (`user_id`) REFERENCES `usermanage_user` (`id`))

是否可以更改id?如果存在一些相关因素,我如何逐一解决,例如usermanage_user_groups

3 个答案:

答案 0 :(得分:0)

id字段是Django添加的自动主键字段,因为您没有提供primary_key=True属性。

注意

现在,正如评论所说,您可能不应该更改该字段的行为,因为它可以保证整个数据的唯一性。有关详细信息,请参阅链接文档。

考虑到你了解到现在,在我的观察中你有两种可能性。

我认为首选解决方案

1)添加自定义AutoField并在10000处启动,然后相应地进行更新。

黑客版

2)在数据库中添加id为9999的用户。这将导致根据此新值自动递增id字段。它不会填补它们之间的值。

答案 1 :(得分:0)

您可以在数据库中设置从10000开始的序列。也可以尝试通过db manager手动添加id为9999的用户。

答案 2 :(得分:0)

我有点理解您想要实现的目标,但是我不确定是否要在表中保留现有用户数据,包括user,usermanage_user,usermanage_user_groups;

意思是, 您是否只是要将现有用户的user_id从[1、2、3、4,...... 25]替换为[10000、10001、10002、10004,...... 10025] ?

1]如果是,那么操纵DB中的表以安全地更新所有引用表中的ID是一种方法。如果您共享架构结构/ django模型,那么我可以在此处提供更好的解决方案。

2]如果否,则可以简单地将AUTO_INCREMENT设置为10000,以便以下新添加的用户以10000+开始

 import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;

public class WebAccessor  {
    public static void main(String[] args) {

        WebDriver driver = new HtmlUnitDriver();
        driver.get("https://portal.mcpsmd.org/public/");

        // Find the text input element by its name
        WebElement username = driver.findElement(By.id("fieldAccount"));
        WebElement password = driver.findElement(By.id("fieldPassword"));

        // Enter something to search for
        username.sendKeys("hullo");

//      WebElement submit = driver.findElement(By.name("btn-enter"));

        // Check the title of the page
        System.out.println("Page title is: " + driver.getTitle());

        driver.quit();
    }
}