Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.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-Models+;字典目录_Python_Django_Django Models - Fatal编程技术网

Python Django-Models+;字典目录

Python Django-Models+;字典目录,python,django,django-models,Python,Django,Django Models,我有一个这样的数据结构 [{'name': 'sfsdf sdfsdf', 'id': '621205528'}, {'name': 'test name', 'id': '32324234234'}, {'name': 'another name', 'id': '3434535342221'}] 现在我有了一个名为Profile的模型,其中字典中的id映射到模型中的uid字段 我想删除列表中数据库中存在的所有条目。有没有一种优雅的方法可以做到这一点,现在我有一堆for循环,它们对db有

我有一个这样的数据结构

[{'name': 'sfsdf sdfsdf', 'id': '621205528'},
 {'name': 'test name', 'id': '32324234234'},
 {'name': 'another name', 'id': '3434535342221'}]
现在我有了一个名为Profile的模型,其中字典中的id映射到模型中的uid字段


我想删除列表中数据库中存在的所有条目。有没有一种优雅的方法可以做到这一点,现在我有一堆for循环,它们对db有多个调用,但这可能不是最好的方法。

我会这样做:

data = [{'name': 'sfsdf sdfsdf', 'id': '621205528'},
{'name': 'test name', 'id': '32324234234'},
{'name': 'another name', 'id': '3434535342221'}]

Profile.objects.filter(id__in=[x['id'] for x in data]).delete()
更充实的版本:

ids = [x['id'] for x in data] # gives you ['621205528', '32324234234', '3434535342221']
selection = Profile.objects.filter(id__in=ids)
selection.delete()

我会这样做:

data = [{'name': 'sfsdf sdfsdf', 'id': '621205528'},
{'name': 'test name', 'id': '32324234234'},
{'name': 'another name', 'id': '3434535342221'}]

Profile.objects.filter(id__in=[x['id'] for x in data]).delete()
更充实的版本:

ids = [x['id'] for x in data] # gives you ['621205528', '32324234234', '3434535342221']
selection = Profile.objects.filter(id__in=ids)
selection.delete()

假设没有数百条记录要删除,您可以使用以下选项

objs = [{'name': 'sfsdf sdfsdf', 'id': '621205528'}, ...]

Profile.objects.filter(id__in=[x.get('id') for x in objs]).delete()

假设没有数百条记录要删除,您可以使用以下选项

objs = [{'name': 'sfsdf sdfsdf', 'id': '621205528'}, ...]

Profile.objects.filter(id__in=[x.get('id') for x in objs]).delete()

您可以一次性从数据库中获取匹配列表,并比较:

db_ids = set(Profile.objects.values_list('uid', flat=True))
my_ids = set([d['id'] for d in original_list])
ids_to_keep = my_ids - db_ids
list_to_keep = [l for l in original_list if l['id'] in ids_to_keep]

您可以一次性从数据库中获取匹配列表,并比较:

db_ids = set(Profile.objects.values_list('uid', flat=True))
my_ids = set([d['id'] for d in original_list])
ids_to_keep = my_ids - db_ids
list_to_keep = [l for l in original_list if l['id'] in ids_to_keep]

首先,您需要从列表中的该模型获取ID列表

id_list = Profile.objects.filter(whaterever filter).values_list('id', flat=True).order_by('id')
如果是整数,则返回一个列表

然后将其从当前列表中删除:

mylist = [{'name': 'sfsdf sdfsdf', 'id': '621205528'}, {'name': 'test name', 'id': '32324234234'}, {'name': 'another name', 'id': '3434535342221'}]
for counter, tmp in enumerate (mylist):
     if int(tmp['id']) in id_list:
         id_list.pop(counter)

如果使用pop,它将修改现有列表。如果您不想更改现有列表,还可以创建另一个列表。

首先,您需要从列表中的该模型获取ID列表

id_list = Profile.objects.filter(whaterever filter).values_list('id', flat=True).order_by('id')
如果是整数,则返回一个列表

然后将其从当前列表中删除:

mylist = [{'name': 'sfsdf sdfsdf', 'id': '621205528'}, {'name': 'test name', 'id': '32324234234'}, {'name': 'another name', 'id': '3434535342221'}]
for counter, tmp in enumerate (mylist):
     if int(tmp['id']) in id_list:
         id_list.pop(counter)

如果使用pop,它将修改现有列表。如果您不想更改现有列表,也可以创建另一个列表。

这是一次性脚本,还是您计划一次又一次地运行?这是一次性脚本,还是您计划一次又一次地运行?Dnaluz说他想删除列表中的条目,而不是数据库中的条目!哦,我明白了。我将其理解为“我想删除数据库中存在的列表中的所有条目”。我错了。德纳鲁兹说他想删除列表中的条目,而不是数据库中的条目!哦,我明白了。我将其理解为“我想删除数据库中存在的列表中的所有条目”。我的错误。