INSERT table names using SELECT statement in MySQL

Question:

In MySQL, I know I can list the tables in a database with:

SHOW TABLES

But I want to insert a table name into a specified table, for example:

INSERT INTO dataset_names (dataset)
SELECT table_name FROM information_schema.tables
WHERE table_schema = '%s';

But when I execute the above statement, the dataset_names table does not get updated.
I created the master table using:

CREATE TABLE dataset_names (id INT AUTO_INCREMENT PRIMARY KEY, dataset text);

Here is the python code.

    dataset_name_query = """
                        INSERT INTO dataset_names (dataset) values(
                        SELECT table_name FROM information_schema.tables
                        WHERE table_schema = '%s');
                        """% (tablename)
    
    csv_obj.read()
    csv_obj.create()
    cursor = createConnection()
    #Cursor executing the dataset insert into master table query
    cursor.execute(dataset_name_query)
    closeCursor(cursor)
Asked By: Giovanni Michel

||

Answers:

You are use wrong syntax to insert data in a table, you forgot to use ‘values’ keyword before providing values.
Your command should be something like this –

INSERT INTO dataset_names (dataset) values(
SELECT table_name FROM information_schema.tables
WHERE table_schema = '%s');

This should work.

Answered By: Hemant
INSERT INTO table_names(name) (SELECT table_name FROM information_schema.tables WHERE table_schema='database_name')

Here the order on insert values and select values must match;

Answered By: Krishna Acharya

You should use a prepared statement, not string formatting. You also need to call connection.commit() to make the changes permanent; replace connection with the name of your connection variable (it’s not shown in your example code).

dataset_name_query = """
    INSERT INTO dataset_names (dataset)
    SELECT table_name FROM information_schema.tables
    WHERE table_schema = %s;
    """

cursor = createConnection()
#Cursor executing the dataset insert into master table query
cursor.execute(dataset_name_query, [tablename])
connection.commit()
closeCursor(cursor)
Answered By: Barmar
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.