我有一个(非常)大的表格> 100M行。我想删除具有某些条件的1M行而不在任何表锁或超时问题中运行。 在这种情况下,IMO删除限制是最佳选择。 我试图找到一个简单的SQL查询的peewee等价物
DELETE FROM users WHERE condition=1 LIMIT 10
我的第一个方法是:
Users.delete().where(condition=10).limit(10)
但DeleteQuery没有限制方法。糟糕...
那么,使用peewee删除大量行的最佳做法是什么?
答案 0 :(得分:4)
如果你想删除限制,那么只需使用子查询:
/* This is a function that will merge contents of arr1 and arr2 and store in arr3 as a
pointer */
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void merge(double arr1[], double arr2[], double *arr3[], int sz1, int sz2, int *sz3);
void print_arr(double arr[], int sz);
int main(){
double v0[] = {};
double v1[] = {22.0, 30.1, 35.2, 49.2, 56.4, 65.1, 76.4, 79.6, 86.2, 88.9};
double v2[] = {4.6, 9.0, 13.0, 47.8, 66.9, 68.7, 71.0};
double v3[] = {80.1, 92.7, 97.4, 102.3, 105.0, 112.3, 121, 136.7, 163.4, 177.9};
int sz1 = 10, sz2 = 7, sz3 = 10, szres;
double *res;
printf("\nTEST 1\n======\n");
merge(v1, v2, &res, sz1, sz2, &szres);
print_arr(res,szres);
free(res);
printf("\nTEST 2\n======\n");
merge(v0, v3, &res, 0, sz3, &szres);
print_arr(res,szres);
free(res);
printf("\nTEST 3\n======\n");
merge(v2, v3, &res, sz2, sz3, &szres);
print_arr(res,szres);
free(res);
return 0;
}
/* function to print the array */
void print_arr(double arr[], int sz){
for(int i = 0; i < sz; i++){
printf("%7.2lf",arr[i]);
}
printf("\n");
}
void merge(double arr1[], double arr2[], double *arr3[], int sz1, int sz2, int *sz3) {
int i, j, k;
j = k = 0;
for (i = 0; i < (sz1+sz2);) {
if(j < sz1 && k < sz2) {
if (arr1[j] < arr2[k]) {
*arr3[i] = arr1[j];
j++;
} else {
*arr3[i] = arr2[k];
k++;
}
i++;
} else if (j == sz1) {
for (; i < (sz1 + sz2);) {
*arr3[i] = arr2[k];
k++;
i++;
}
} else {
for (; i < (sz1+sz2);) {
*arr3[i] = arr1[j];
j++;
i++;
}
}
}
}
答案 1 :(得分:0)
SQL不支持LIMIT。所以不,不可能这样做。