【问题标题】:Inserting data into SQL database that needs to be linked将数据插入需要链接的 SQL 数据库
【发布时间】:2015-03-20 15:33:01
【问题描述】:

我不确定该问题的确切措辞是什么,所以如果我无法找到任何资源告诉我如何执行此操作,这很可能是原因。

基本问题是我有一个用 Python 编码的网络爬虫,它有一个“食谱”对象,该对象存储有关特定食谱的某些数据,例如“名称”、“说明”、“成分”等。 Instructions' 和 'Ingredients' 是一个字符串数组。

现在,当我想将这些数据存储在数据库中以便从其他来源访问时,我遇到了问题。

数据库的基本示例如下所示:

(食谱) r_id, 名字, ....

(成分) i_id,姓名,....

(配方成分) r_id,i_id。

现在,特别是我的问题是,我如何确保我没有重复成分以及如何插入数据以便将成分链接到当前食谱对象的 id?

我知道我的解释很糟糕,但我很难用语言表达。任何帮助表示赞赏,谢谢。

【问题讨论】:

  • 您好,您可以查看这些答案并提供反馈吗?我们不知道什么方法可以解决您的问题。

标签: python sql


【解决方案1】:

对于第一个问题(我如何确保我没有重复成分?),如果我理解得很好,基本上是把你的主键作为 (i_id, name) 放在表成分中。这样你就保证不可能插入具有相同键(i_id,名称)的成分。

现在是第二个问题(如何插入数据以使成分链接到当前 Recipe 对象的 id?)。这个问题我真的不是很懂。我想你想要的是把食谱和配料联系起来。这可以使用表RecipeIngredients 进行。当您想要这样做时,您只需在该表中插入一个新行,其中包含配方的 ID 和成分的 ID。如果这不是你想要的对不起,我真的不明白。

【讨论】:

  • 是的,抱歉 - 我觉得很难解释。对于您的第一点,我的 i_id 目前是自动递增的,这意味着永远不会出现具有相同 i_id 和名称的重复项。这还能用吗?对于第二点,我了解RecipeIngredients 部分并拥有该表,但是如何获取我想要在插入时将其链接到的Recipe 的r_id?我只是在它之前使用一个 Select 并将其拉出吗?
  • 好的,然后将 i_id 作为您的 PK 并将约束 UNIQUE 添加到列 name。这样你就不能有两个同名的成分。是的!您应该按名称执行 SELECT(因为 UNIQUE 应该只返回 1 行)。然后将其插入i_id 和您要在表RecipeIngredients 中关联的配方的r_id
【解决方案2】:

对于第一个问题,我认为你缺乏数据处理和数据库设计经验。不过不用担心,它可以边做边学。

关于第二个问题,让我们进入正题。 食谱与数据库中的成分相关,但实际上每个食谱的成分都是不同的,成分包括许多食物元素——鸡蛋、肉类、面粉等。 当您创建 RecipeIngredients 表时,您无法显示其中一个食谱使用了这些成分。 RecipeIngredients 的 i_id 应该存储多种成分 ,不是一种成分。它需要修复。

我推荐RecipeIngredients 表集r_id(OneToOneField) 和i_ids(TextFeild) 列。如果您在 django 中编程,注释是模型字段。

我假设你的模型是这样的:

# Recipes model
class Recipes(models.Model):
    r_id = models.IntegerField(primary_key=True)
    name = models.TextField()

# Ingredients model
class Ingredients(models.Model):
    i_id = models.IntegerField(primary_key=True)
    name = models.TextField()

# RecipeIngredients model
class RecipeIngredients(models.Model):
    r_id = models.OneToOneField(Ingredients, primary_key=True)
    i_ids = models.TextField()

下一个流程数据:

# fake data
the_recipe =  "Pasta Sauce with Meatballs"
the_ingredients = ["Pasta Sauce", "meatballs", "spaghetti"]

# save the recipe in database
recipe_object = Recipes(name="the_recipe").save()

# save the ingredients in database
i_ids_arrary = []
for i in the_ingredients:
    ingredient_object = Ingredients(name=i).save()
    i_ids_arrary.append(str(ingredient_object.i_id))
i_ids_string = ",".join(i_ids_arrary)

# save RecipeIngredients
RecipeIngredients(r_id=recipe_object, i_ids=i_ids_string).save()

我认为它可以详细完成大部分任务。希望大家可以参考一下。

【讨论】:

    猜你喜欢
    • 2019-09-11
    • 2012-02-29
    • 2023-04-04
    • 2011-02-28
    • 2013-04-28
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2016-09-02
    相关资源
    最近更新 更多