Peewee:删除限制

时间:2016-02-08 14:28:22

标签: python mysql peewee

我有一个(非常)大的表格> 100M行。我想删除具有某些条件的1M行而不在任何表锁或超时问题中运行。 在这种情况下,IMO删除限制是最佳选择。 我试图找到一个简单的SQL查询的peewee等价物

DELETE FROM users WHERE condition=1 LIMIT 10

我的第一个方法是:

Users.delete().where(condition=10).limit(10)

但DeleteQuery没有限制方法。糟糕...

那么,使用peewee删除大量行的最佳做法是什么?

2 个答案:

答案 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。所以不,不可能这样做。