Автоматическое увеличение значения переменной в 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
)
'''