Автоматическое увеличение значения переменной в generate_series

Я столкнулся с необходимостью автоматически увеличивать значение переменной в generate_series. По условию бизнес-логики, идентификатор поля в модели не увеличивается автоматически.

Я решил попробовать найти максимальное значение id заранее и в течение генерации просто увеличить его на 1. Но я не понимаю, как это сделать правильно.

max_id = Companies.objects.aggregate(Max('id'))  # {'id__max': 1529367}
value = max_id['id__max']

cursor.execute(f'''
    INSERT INTO test.companies(
                    id, name, city_id, revenue, labors
                )
    SELECT  {value} = {value}+1,   # This is what I want, but I don't know how to do it 
           (
                SELECT x[1 + ((random() * 25)::INT) % 3]
                FROM (
                    SELECT '{{Google,Yandex,Amazon}}'::text[]
                ) AS z2(x)
                WHERE SEQ = SEQ
            ),
           (random() * 3000)::INT,
           (random() * 3000)::INT,
           (random() * 3000)::INT

    FROM generate_series(1,10)  SEQ;
''')

Все это я делаю как часть моей работы в Python Django.

Есть ли какие-либо препятствия для выполнения итерации от 1 до 10 в Python вместо SQL? Кроме того, я думаю, что вы пропустили VALUES в вашем SQL-запросе.

max_id = Companies.objects.aggregate(Max('id'))  # {'id__max': 1529367}
value = max_id['id__max']
for addval in range(1,10):
    cursor.execute(f'''
        INSERT INTO test.companies(id, name, city_id, revenue, labors)
        VALUES (''' + value+addval + ''',
           (
                SELECT x[1 + ((random() * 25)::INT) % 3]
                FROM (
                    SELECT '{{Google,Yandex,Amazon}}'::text[]
                ) AS z2(x)
                WHERE SEQ = ''' + addval + '''
            ),
           (random() * 3000)::INT,
           (random() * 3000)::INT,
           (random() * 3000)::INT
        )
     '''
Вернуться на верх