перенос с ms sql в mysql pyt

Делаю перенос некоторых полей с ms sql в my sql на python. И надо делать именно на python ни на чем больше

cur_my = conn_my.cursor()
cur_ms = conn_ms.cursor()
cur_ms.execute("SELECT item_id, id_group FROM items")
for row in cur_ms.fetchall():
    cur_my.execute("INSERT INTO items_in_dbo (item_id,  id_group) VALUES (%s,%s)", ('item_id','id_group'))
conn_my.commit()


conn_ms.close()
conn_my.close()

Но переносит почему то так, подскажите в чем дело

введите сюда описание изображения

UPD

for row in cur_ms.fetchall():
    print(row) 
    cur_my.execute("INSERT INTO items_in_dbo (item_id,  id_group) VALUES ('%s','%s')"% (row[0][0],row[0][1]))
conn_my.commit()

но выдает теперь, может ли быть дело в кодировке?? там varchar(255) и могут быть поля с текстом типо _яяяяяяя123123 и id_group INT

введите сюда описание изображения


Ответы (1 шт):

Автор решения: mrEvgenX

Вы зачем-то в цикле print(row) поставили, но не поделились, что там печатается. Кажется, не помешало бы знать, как именно выглядит типичное значение, хранящееся в row. Ну ладно...

row - это котеж из данных полей текущей строки. row[0] - это значение первого поля (судя по всему - item_id) текущей строки. Например, как вы приводите в вопросе "_яяяяяяя123123".

Тогда

  • row[0][0] - первый символ, подчеркивание
  • row[0][1] второй символ, буква "я", которую СУБД неявно преобразует в ноль

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

Что нужно, так это скорее всего - (row[0], row[1]). Причем не подставлять это прямо в строку, это пагубная небезопасная практика.

Лучше так (за подробностями можно ознакомиться с документацией на используемую библиотеку):

cur_my.execute(
    "INSERT INTO items_in_dbo (item_id,  id_group) VALUES (%s, %s)",
    (row[0], row[1])
)
→ Ссылка