Pandas dataframe.to_sql создает столбец с именем «INDEX», и mysql не может обработать его имя столбца =»index»

#python #mysql #pandas

#python #mysql #pandas

Вопрос:

Я сделал df.to_sql(name=’phishingdataset’,con= con,if_exists=’append’,index=False)

где в моем наборе данных нет столбца с именем «index», где, как и при создании таблицы в mysql, он создает один столбец с этим именем. И когда я пытаюсь получить доступ к этому столбцу, он выдает ошибку.

Я попытался выполнить поиск в документах docs и mysql docs, но такой ссылки такого рода нет.

 df.to_sql(name='phishingdataset',con=con,if_exists='append',index=False)
  

В запросе mysql:-

 select * from phishingdataset where index=1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'index=1' at line 1
  

Где моя схема :-

  ----------------------------- ------------ ------ ----- --------- ------- 
| Field                       | Type       | Null | Key | Default | Extra |
 ----------------------------- ------------ ------ ----- --------- ------- 
| index                       | bigint(20) | YES  |     | NULL    |       |
| having_IPhaving_IP_Address  | bigint(20) | YES  |     | NULL    |       |
| URLURL_Length               | bigint(20) | YES  |     | NULL    |       |
| Shortining_Service          | bigint(20) | YES  |     | NULL    |       |
| having_At_Symbol            | bigint(20) | YES  |     | NULL    |       |
| double_slash_redirecting    | bigint(20) | YES  |     | NULL    |       |
| Prefix_Suffix               | bigint(20) | YES  |     | NULL    |       |
| having_Sub_Domain           | bigint(20) | YES  |     | NULL    |       |
| SSLfinal_State              | bigint(20) | YES  |     | NULL    |       |
| Domain_registeration_length | bigint(20) | YES  |     | NULL    |       |
| Favicon                     | bigint(20) | YES  |     | NULL    |       |
| port                        | bigint(20) | YES  |     | NULL    |       |
| HTTPS_token                 | bigint(20) | YES  |     | NULL    |       |
| Request_URL                 | bigint(20) | YES  |     | NULL    |       |
| URL_of_Anchor               | bigint(20) | YES  |     | NULL    |       |
| Links_in_tags               | bigint(20) | YES  |     | NULL    |       |
| SFH                         | bigint(20) | YES  |     | NULL    |       |
| Submitting_to_email         | bigint(20) | YES  |     | NULL    |       |
| Abnormal_URL                | bigint(20) | YES  |     | NULL    |       |
| Redirect                    | bigint(20) | YES  |     | NULL    |       |
| on_mouseover                | bigint(20) | YES  |     | NULL    |       |
| RightClick                  | bigint(20) | YES  |     | NULL    |       |
| popUpWidnow                 | bigint(20) | YES  |     | NULL    |       |
| Iframe                      | bigint(20) | YES  |     | NULL    |       |
| age_of_domain               | bigint(20) | YES  |     | NULL    |       |
| DNSRecord                   | bigint(20) | YES  |     | NULL    |       |
| web_traffic                 | bigint(20) | YES  |     | NULL    |       |
| Page_Rank                   | bigint(20) | YES  |     | NULL    |       |
| Google_Index                | bigint(20) | YES  |     | NULL    |       |
| Links_pointing_to_page      | bigint(20) | YES  |     | NULL    |       |
| Statistical_report          | bigint(20) | YES  |     | NULL    |       |
| Result                      | bigint(20) | YES  |     | NULL    |       |
 ----------------------------- ------------ ------ ----- --------- ------- 
32 rows in set (0.00 sec)
  

Комментарии:

1. index это зарезервированное слово практически в любой базе данных, совместимой с SQL. В MySQL вы можете обернуть имя обратными метками при ссылке. Теперь, почему Pandas создает этот столбец в to_sql , это другой и любопытный вопрос. Что находится в содержимом? Индекс фрейма данных?

2. ах, содержимое фрейма данных, на самом деле у него есть заголовок с именем index , но я уже удалил этот столбец перед вставкой в db. И именно поэтому странно, что this .to_sql создал его самостоятельно даже после установки index = false. Теперь, когда он создан, каким может быть запрос для доступа к этому индексу?

3. Вы переназначили фрейм данных, когда удалили столбец? Пожалуйста, опубликуйте эту drop строку. Кроме того, я только что упомянул о том, чтобы обернуть индекс в обратные метки в вашем запросе, потому что это зарезервированное слово.

4. Я не переназначал фрейм данных , это была ошибка. Я думал, что мне не нужно этого делать. Но теперь это сделано и работает нормально. Спасибо за помощь. 🙂