Importing data from a MySQL database into a Pandas data frame including column names

I am importing data from a MySQL database into a Pandas data frame. The following excerpt is the code that I am using:

    import mysql.connector as sql
    import pandas as pd

    db_connection = sql.connect(host='hostname', database='db_name', user='username', password='password')
    db_cursor = db_connection.cursor()
    db_cursor.execute('SELECT * FROM table_name')

    table_rows = db_cursor.fetchall()

    df = pd.DataFrame(table_rows)

When I print the data frame it does properly represent the data but my question is, is it possible to also keep the column names? Here is an example output:

                              0   1   2     3     4     5     6     7     8
    0  :ID[giA0CqQcx+(9kbuSKV== NaN NaN  None  None  None  None  None  None
    1  lXB+jIS)DN!CXmj>0(P8^]== NaN NaN  None  None  None  None  None  None   
    2  lXB+jIS)DN!CXmj>0(P8^]== NaN NaN  None  None  None  None  None  None   
    3  lXB+jIS)DN!CXmj>0(P8^]== NaN NaN  None  None  None  None  None  None   
    4  lXB+jIS)DN!CXmj>0(P8^]== NaN NaN  None  None  None  None  None  None

What I would like to do is keep the column name, which would replace the pandas column indexes. For example, instead of having 0, the column name would be: "First_column" as in the MySQL table. Is there a good way to go about this? or is there a more efficient approach of importing data from MySQL into a Pandas data frame than mine?

IMO it would be much more efficient to use pandas for reading data from your MySQL server:

    from sqlalchemy import create_engine
    import pymysql

    db_connection_str = 'mysql+pymysql://mysql_user:[email protected]_host/mysql_db'
    db_connection = create_engine(db_connection_str)

    df = pd.read_sql('SELECT * FROM table_name', con=db_connection)

this should also take care of column names...

From: stackoverflow.com/q/37730243