python-проблемы с записью в БД MySQL

226
04 марта 2018, 22:09

Считываю данные из БД, потом после обработки хочу их записать в другую таблицу.

db = pymysql.connect(host='localhost', user='root', passwd='',
                database='mom_db', charset='utf8')
test = pd.read_sql("SELECT comm FROM comments ", db)
test['pred_lr'] = grid_lr.best_estimator_.predict(test['comm'])
test['pred_nb'] = grid_nb.best_estimator_.predict(test['comm'])
print(test)

после этого просто удаляю ненужный уже (после проведения анализа) столбец test['comm'] и остаток test записываю в БД в ту же таблицу:

 del test['comm']
 db_connection = 'mysql+pymysql://root@localhost/mom_db'
 conn = create_engine(db_connection, encoding='utf-8')
 test.to_sql(name='comments', con=conn, if_exists='append', index=False)

результаты print(test):

                                                   comm  pred_lr  pred_nb
0     Как только поймали за руку, сразу забегала меж...        1       -1
1                                           кто-то врёт       -1       -1
2                   Снова гэта усё правакатары с Польшы        1       -1
3     Мне кажется надо по уголовной статье таких суд...        1       -1
4     Мне пофиг кто там проголосовал, главное что 90...        1        1
5     Прямое доказательство фальсификации, всем и та...        1        1
6     Цитата : "Инцидент не будет иметь влияния на и...        1        1
7                          А что она может еще сказать?       -1       -1
8     В одном месте он предъявил договор о найме жил...       -1        1
9     Она констатировала, что этот случай говорит о ...       -1        1
10    Не важно, что он предъявил, если даже левый че...       -1       -1
11    Как то вериться больше учителям и т. П. Чем ер...       -1       -1
12    Цитата \t\tИриша_Лалапусечка: "Мне кажется над...        1       -1
13      Вся эта власть основана на подлости и лживости.       -1       -1
14    Ермошина достаточно опытный человек, чтобы дат...        1        1
15    Цитата \t\tИриша_Лалапусечка: "Мне кажется над...        1        1
16    вот это больше похоже на правду. члены комисси...        1       -1
17    Да жулики эти "активисты",добропорядочный бела...        1        1
18    Выборы-дурыборы. Благо никто не хочет играть с...       -1       -1
19    Ермошиной к ответу!!!Провакаторов она нашла,а ...       -1       -1
20    Кстати все идет к тому что с этими назойливыми...       -1        1
21    А те жэншчины,которых привезли в микроавтобусе...        1       -1
22    Уже всем понятно, что на Западе никто эти выбо...       -1       -1
23    Они даже не стесняются нагло фальсифицировать....       -1       -1
24    ничего, что там надо в журнале расписываться п...        1       -1
25                                     красивая сказка!       -1        1
26    Ну вот и ответ.... В стиле сам дурак. Впрочем ...       -1       -1
27    Оппозиция у нас подлая,посмотрите к чему оппоз...        1        1
28    А на видео видно, что он сочиняет слезливую ск...       -1       -1
29    Факт остается фактом! Это доказывает что выбор...        1       -1
...                                                 ...      ...      ...
4670                                                          -1        1
4671                                                          -1        1
4672                                                          -1        1
4673                                                          -1        1
4674                                                          -1        1
4675                                                          -1        1
4676                                                          -1        1
4677                                                          -1        1
4678                                                          -1        1
4679                                                          -1        1
4680                                                          -1        1
4681                                                          -1        1
4682                                                          -1        1
4683                                                          -1        1
4684                                                          -1        1
4685                                                          -1        1
4686                                                          -1        1
4687                                                          -1        1
4688                                                          -1        1
4689                                                          -1        1
4690                                                          -1        1
4691                                                          -1        1
4692                                                          -1        1
4693                                                          -1        1
4694                                                          -1        1
4695                                                          -1        1
4696                                                          -1        1
4697                                                          -1        1
4698                                                          -1        1
4699                                                          -1        1
[4700 rows x 3 columns]

и в бд столбцы pred_lr и pred_nb добавляются также:

кто-то может подсказать, как это исправить?

Answer 1

DataFrame.to_sql() не позволяет изменять (UPDATE) данные в SQL таблицах. Можно либо полностью перезаписать содержимое всей таблицы (if_exists='replace') или добавить новые записи (if_exists='append'). В новых записях будут только те данные, которые присутствуют в DataFrame

Если нужно сделать UPDATE, то можно поступить следующим образом:

сначала сохранить DataFrame во временную (по смыслу, а не по типу таблиц в MySQL) таблицу:

df.to_sql('tmp', conn, if_exists='replace')

После этого поменять нужные столбцы в MySQL (это можно сделать при помощи SQL Alchemy)

update comments 
  set pred_lr=tmp.pred_lr, pred_nb=tmp.pred_nb
FROM comments
INNER JOIN tmp
  on comments.id = tmp.id;
READ ALSO
python- проблемы с кодировкой при считывании из mysql БД и записи обратно

python- проблемы с кодировкой при считывании из mysql БД и записи обратно

Пытаюсь делать это вот так Текст комментов и оценки формируют Dataframe, который потом я записываю в другую таблицу :

175
сравнение времени в mySql

сравнение времени в mySql

Доброго времени сутокСтолкнулся с такой проблемой

174
Получить главный ключ по трем уровням

Получить главный ключ по трем уровням

Задача следующая: Есть табличка keys со столбиками: key | bind Где key - это ключ, а bind - это так сказать привязанныйkeyПример:

174