перенос с 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 шт):
Вы зачем-то в цикле 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])
)

