Ошибки аннотаций по времени [дубликаты]

Если кто-то пытается обновить данные из одной базы данных в другую, независимо от того, на какую таблицу они нацелены, для этого должны быть некоторые критерии.

Этот код лучше и чист для всех уровней: [ ! d2]

  update dbname1.content targetTable left join dbname2.someothertable sourceTable at targetTable.compare_field = sourceTable.compare_field set targetTable.col1 = sourceTable.cola, targetTable.col2 = sourceTable.colb, targetTable.col3 = sourceTable  .colc, targetTable.col4 = sourceTable.cold  

Traaa! Он отлично работает!

С учетом вышеизложенного вы можете изменить заданные поля и критерии «on», чтобы выполнить свою работу. Вы также можете выполнить проверки, затем потянуть данные в таблицу temp, а затем запустить обновление, используя приведенный выше синтаксис, заменив имена таблиц и столбцов.

Надеюсь, что это сработает, если не сообщите мне. Я напишу вам точный запрос.

2
задан user3008862 19 November 2013 в 15:26
поделиться

2 ответа

В этом цикле:

for i in x:
    f[i] = x[i] + 1

i принимает значения 1, 2, а затем 3. x[i] не так, как вы думаете. i уже содержит содержимое ячейки массива x. Поскольку индексы массива начинаются с 0, вы делаете IndexError при попытке получить элемент индекса 3 (который будет 4-м элементом).

Возможно, вы хотели что-то вроде:

for i in range(len(x)):
    f[i] = x[i] + 1

Это также можно было бы записать:

for i, v in enumerate(x):
    f[i] = v + 1
4
ответ дан Maxime Chéramy 15 August 2018 в 20:34
поделиться

Когда вы выполняете for i in some_list, i ссылается на элементы этого списка, а не на их индексы. Например:

In [1]: for i in [3, 2, 1]:
   ...:     print i
   ...:     
3
2
1

Однако вы используете i в качестве индекса.

Вы выполняете итерацию с i по x, и, таким образом, i принимает значения из 1, 2 и 3. Но 3 является слишком большим индексом для массива длины 3. Последний индекс 2, так как в индексах Python начинаются с 0.

2
ответ дан Lev Levitsky 15 August 2018 в 20:34
поделиться
  • 1
    Я думаю, что вижу, так что хотя индексы Python начинаются с 0, цикл for начинается с i=1? В этом случае добавление дополнительного элемента в f должно исправить мою проблему, но это не похоже на особенно элегантное решение? – user3008862 19 November 2013 в 15:21
  • 2
    @ user3008862 Он начинается с i=1, потому что 1 является 0-м элементом массива. Я немного расширил ответ, чтобы сделать его более ясным. – Lev Levitsky 19 November 2013 в 15:37
Другие вопросы по тегам:

Похожие вопросы: