SQL создать оператор обновления, используя скрипт python - PullRequest
1 голос
/ 12 марта 2020

при попытке отформатировать обновление sql с помощью скрипта, у меня есть столбцы в базе данных с именами 'col_prev12', 'col_prev24' и т. Д. c, которые должны складывать ежемесячные сегменты, то есть 1-12 для prev12 и 13-24 для prev24 это то же самое должно произойти несколько раз. Создан массив для поворота и попытки форматирования

prev12cols = [
    "colA",
    "colB",
    "colC",
    "colD"
]  


for col_prefix in prev12cols:
        monthly_cols.extend(["{0} = {3}{1}+{3}{2}".format(col_prefix + "_prev_12Mo", str(i),str(i+1), col_prefix) for i in range(1,12)])

Каждый элемент массива соответствует столбцу с именем colA1, colA2, ... colA24, что я хочу, это что-то вроде colA_prev_12Mo = colA1 + colA2 + ... colA12, а затем сделать то же самое для 13-24

1 Ответ

0 голосов
/ 12 марта 2020

Выбирайте значимые имена переменных, не делайте слишком много вещей за раз, скорее делайте это шаг за шагом. Мы начинаем только с префиксов столбцов:

column_prefixes = ["colA", "colB", "colC", "colD"]
for column_prefix in column_prefixes:
    print(column_prefix)

Что печатает:

colA
colB
colC
colD

Теперь мы добавим дополнительный l oop для того, сколько лет назад были получены данные. Помните, что range не включает «последний шаг», поэтому, если нам нужен текущий год 0 и год назад 1, нам нужно запустить range(0, 2). Это может помочь вам, если вы вместо этого напишите range(0, 1 + 1):

column_prefixes = ["colA", "colB", "colC", "colD"]
for column_prefix in column_prefixes:
    for year in range(0, 1 + 1):
        print(column_prefix, year)

Что печатает:

colA 0
colA 1
colB 0
colB 1
colC 0
colC 1
colD 0
colD 1

Теперь мы добавим окончательный l oop для номера месяца , Вам нужно будет выбрать начало и конец для range в зависимости от year:

column_prefixes = ["colA", "colB", "colC", "colD"]
for column_prefix in column_prefixes:
    for year in range(0, 1 + 1):
        for month in range(year * 12 + 1, (year + 1) * 12 + 1):
            print(column_prefix, year, month)

Что печатает:

colA 0 1
colA 0 2
colA 0 3
colA 0 4
colA 0 5
colA 0 6
colA 0 7
colA 0 8
colA 0 9
colA 0 10
colA 0 11
colA 0 12
colA 1 13
colA 1 14
colA 1 15
colA 1 16
colA 1 17
colA 1 18
colA 1 19
colA 1 20
colA 1 21
colA 1 22
colA 1 23
colA 1 24
colB 0 1
colB 0 2
colB 0 3
colB 0 4
colB 0 5
colB 0 6
colB 0 7
colB 0 8
colB 0 9
colB 0 10
colB 0 11
colB 0 12
colB 1 13
colB 1 14
colB 1 15
colB 1 16
colB 1 17
colB 1 18
colB 1 19
colB 1 20
colB 1 21
colB 1 22
colB 1 23
colB 1 24
colC 0 1
colC 0 2
colC 0 3
colC 0 4
colC 0 5
colC 0 6
colC 0 7
colC 0 8
colC 0 9
colC 0 10
colC 0 11
colC 0 12
colC 1 13
colC 1 14
colC 1 15
colC 1 16
colC 1 17
colC 1 18
colC 1 19
colC 1 20
colC 1 21
colC 1 22
colC 1 23
colC 1 24
colD 0 1
colD 0 2
colD 0 3
colD 0 4
colD 0 5
colD 0 6
colD 0 7
colD 0 8
colD 0 9
colD 0 10
colD 0 11
colD 0 12
colD 1 13
colD 1 14
colD 1 15
colD 1 16
colD 1 17
colD 1 18
colD 1 19
colD 1 20
colD 1 21
colD 1 22
colD 1 23
colD 1 24

Теперь вся необходимая информация доступна в виде переменная в некоторый момент во время циклов, и нам нужно только собрать строку, которую вы хотите увидеть:

column_prefixes = ["colA", "colB", "colC", "colD"]
for column_prefix in column_prefixes:
    for year in range(0, 1 + 1):
        line = column_prefix + "_" + str(year + 1) + "_years_back = "
        for month in range(year * 12 + 1, (year + 1) * 12 + 1):
            line += column_prefix + str(month) + " + "
        line = line[:-3]
        print(line)

, которая печатает:

colA_1_years_back = colA1 + colA2 + colA3 + colA4 + colA5 + colA6 + colA7 + colA8 + colA9 + colA10 + colA11 + colA12
colA_2_years_back = colA13 + colA14 + colA15 + colA16 + colA17 + colA18 + colA19 + colA20 + colA21 + colA22 + colA23 + colA24
colB_1_years_back = colB1 + colB2 + colB3 + colB4 + colB5 + colB6 + colB7 + colB8 + colB9 + colB10 + colB11 + colB12
colB_2_years_back = colB13 + colB14 + colB15 + colB16 + colB17 + colB18 + colB19 + colB20 + colB21 + colB22 + colB23 + colB24
colC_1_years_back = colC1 + colC2 + colC3 + colC4 + colC5 + colC6 + colC7 + colC8 + colC9 + colC10 + colC11 + colC12
colC_2_years_back = colC13 + colC14 + colC15 + colC16 + colC17 + colC18 + colC19 + colC20 + colC21 + colC22 + colC23 + colC24
colD_1_years_back = colD1 + colD2 + colD3 + colD4 + colD5 + colD6 + colD7 + colD8 + colD9 + colD10 + colD11 + colD12
colD_2_years_back = colD13 + colD14 + colD15 + colD16 + colD17 + colD18 + colD19 + colD20 + colD21 + colD22 + colD23 + colD24

с каждой итерации l oop из месяцев добавляет " + ", в конце после последнего месяца есть лишние +, которые нам нужно удалить с помощью line = line[:-3], который удаляет последние 3 символа нашей строки. Конечно, вместо print вы также можете добавить строку в список.

Дальнейшее чтение: приведенный выше код отлично подходит, но если вы заинтересованы в другом стиле кодирования, посмотрите на использование f-строки и списки.

Последнее замечание: вам может не понадобиться писать эти строки в Python, возможно, это возможно сделать только с SQL - но это другой вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...