gpt4 book ai didi

python - 更新多行可能已过时的表数据

转载 作者:搜寻专家 更新时间:2023-10-30 23:40:27 24 4
gpt4 key购买 nike

我有一个应用程序,我可以在其中创建和编辑由成分及其数量组成的食谱。此信息应该保存在关系数据库(可能是 MySQL 或 SQLite)中。我有一个存储食谱的表和一个 auto_increment 主键和另一个表,我在其中保存成分和数量,通过外键约束引用第一个表。

现在我想在我的应用程序中编写更新代码。我将食谱 ID 保存在我的食谱对象中,因此我可以很容易地引用它。但是我如何正确更新成分和数量?第二个表的多行可能已经过时,必须删除,有些只需要更新(当金额发生变化时)。

我想到的最简单的解决方案就是删除所有引用我当前食谱的行并重新插入它们。这是一种可接受的方法,还是存在针对此类问题的模式/最佳实践?


注意:我知道我可以将成分和数量保存在 varchar stringlist 中,但我想使用某种表结构。


编辑:表创建代码:

CREATE TABLE `recipe` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(30) NOT NULL
PRIMARY KEY (`id`)
)

CREATE TABLE `recipe_ingredients` (
`recipe_id` INT(11) NOT NULL,
`ingredient` VARCHAR(30) NOT NULL,
`amount` FLOAT NOT NULL,
`measurement_unit` VARCHAR(10) NOT NULL,
INDEX `recipe_id` (`recipe_id`),
CONSTRAINT `recipe_ingredients_ibfk_1` FOREIGN KEY (`recipe_id`) REFERENCES `recipe` (`id`),
CONSTRAINT `recipe_ingredients_ibfk_2` FOREIGN KEY (`recipe_id`) REFERENCES `recipe` (`id`)
)

最佳答案

将 auto_increment 主键添加到您的成分表。然后,当您的应用程序发布更新时,您可以通过其主键识别正在更新的成分。

我会像这样添加 PK:

CREATE TABLE `recipe_ingredients` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`recipe_id` INT(11) NOT NULL,
`ingredient` VARCHAR(30) NOT NULL,
`amount` FLOAT NOT NULL,
`measurement_unit` VARCHAR(10) NOT NULL,
PRIMARY KEY (`id`)
INDEX `recipe_id` (`recipe_id`),
CONSTRAINT `recipe_ingredients_ibfk_1` FOREIGN KEY (`recipe_id`) REFERENCES `recipe` (`id`),
)

在您的 UI 中,您将遍历成分并将它们显示在单独的行中,成分 ID 与每一行相关联。它可能看起来像这样:

<table>
<thead>
<tr>
<th>Ingredient</th>
<th>Amount</th>
<th>Units</th>
</tr>
</thead>
<tdata>
<tr>
<td>
<input type='hidden' id='ingredient1_id' value='1' />
<input type='text' id='ingredient1_name' value="salt" />
</td>
<td>
<input type='text' id='ingredient1_amount' value="2" />
</td>
<td>
<input type='text' id='ingredient1_unit' value="tsp" />
</td>
</tr>
<tr>
<td>
<input type='hidden' id='ingredient2_id' value='2' />
<input type='text' id='ingredient2_name' value="flour" />
</td>
<td>
<input type='text' id='ingredient2_amount' value="3" />
</td>
<td>
<input type='text' id='ingredient2_unit' value="cups" />
</td>
</tr>
</tdata>
</table>

现在,如果用户编辑或删除盐行,您就知道它是 ID 为 1 的成分,并且您可以在数据库中识别它。

关于python - 更新多行可能已过时的表数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35555912/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com