我不确定问题的措辞究竟是什么,如果我找不到任何资源告诉我如何做到这一点,这很可能就是原因。
基本问题是我有一个用Python编码的webcrawler,它有一个'Recipe'对象,存储有关特定配方的某些数据,如'Name','Instructions','Ingredients'等''说明'和'成分'是一个字符串数组。
现在,当我想将这些数据存储在数据库中以便从其他来源访问时,我遇到了问题。
数据库的基本示例如下所示:
(配方) r_id,name,....
(成分) i_id,name,....
(RecipeIngredients) r_id,i_id。
现在,特别是我的问题是,如何确保我不会复制成分,如何插入数据以使成分链接到当前Recipe对象的id?
我知道我的解释很糟糕,但我很难说出来。感谢任何帮助。谢谢。
答案 0 :(得分:0)
对于第一个问题(我如何确保我没有复制成分?),如果我理解的话,基本上把你的主键作为(i_id,name)放在表格成分中。这样就可以保证不可能使用相同的键(i_id,name)插入一个成分。
现在针对第二个问题(如何插入数据以便将成分链接到当前Recipe对象的id?)。我真的不太了解这个问题。我认为你想要的是将食谱与食材联系起来。这可以使用表RecipeIngredients进行。当你想要这样做时,你只需在该表中插入一个新行,其中包含配方的id和成分的id。如果不是这个你想要的抱歉,但我真的不明白。
答案 1 :(得分:0)
对于第一个问题,我认为您缺乏数据处理和数据库设计经验。但不要担心,它可以通过实践来学习。
对于第二个问题,让我们说明问题。 食谱与数据库中的成分有关,但实际上每种食谱的成分都不同,成分包括许多食物元素 - 鸡蛋,肉,面粉等。 创建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()
我认为它可以详细完成大部分任务。我希望你可以参考它。