我有一个打开txt文件(350k行)的函数,读取每一行并更新数据库中的字段。该数据库有大约250k-300k的记录。
它对我来说太慢了。
您可以帮我优化查询或导入方式吗?
查询:
PlaceGroupMatch.objects.filter(**query_kwargs).update(sym_ul=int(line[5]), updated=True, updated_date=datetime.now())
整个代码:
def street_postal_codes():
output_file_name = os.path.join(settings.MEDIA_ROOT, "postal", "ulice_GUS.txt")
with open(output_file_name, 'r+') as handle:
next(handle)
lines = csv.reader(handle, delimiter='\t')
lines = list(lines)
def update_data(lines):
transaction.set_autocommit(False)
for index, line in enumerate(lines):
query_kwargs = {
"sym_ext": int(line[10]),
"sym_pod":int(line[4]),
"updated": False
}
qs = PlaceGroupMatch.objects.filter(**query_kwargs).update(sym_ul=int(line[5]), updated=True, updated_date=datetime.now())
print index
if index % 5000 == 0:
print index, datetime.now()
transaction.commit()
transaction.set_autocommit(True)
update_data(lines)