ProgrammingError 1064 haciendo CREATE TABLE AS SELECT de una tabla existente con MySQL en Python

Jean-Sebastien:

Tengo una tabla existente en la nube y quiero hacer una copia de la misma. Me conecto a mi base de datos a través de pymysql, extraer el nombre de usuario de una entrada proporcionada por el usuario nuevo, y quiero crear una nueva tabla que será llamado por el nombre de usuario, y que la mesa será una copia del original. Cuando ejecuto el código de abajo, tengo el siguiente error:

pymysql.err.ProgrammingError: (1064, "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 ''username' AS SELECT * FROM original_table' at line 1")

uname = [email protected]
conn = pymysql.connect(
                    host="db.host",
                    port=int(3306),
                    user=user,
                    passwd=password,
                    db=db,
                    charset='utf8mb4'
                )
                cur = conn.cursor()
                table_name = uname.replace('@', '_').replace('.', '_')
                print('TABLE NAME:', table_name)
                cur.execute(""" CREATE TABLE %s AS SELECT * FROM original_table """, (table_name))
snakecharmerb:

Parámetro cita es en la cotización de los valores . Citando los nombres de tabla no funciona, porque en el camino de MySQL para citar un nombre de tabla es mediante el uso de acentos abiertos ( `), no comillas.

MariaDB [test]>  CREATE TABLE 'username' AS SELECT * FROM my_table;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''username' AS SELECT * FROM my_table' at line 1

En esta causa que necesita para cadena utiliza el formato para crear la sentencia SQL (puede usar acentos abiertos para defenderse de inyección SQL * ):

cur.execute(""" CREATE TABLE `%s` AS SELECT * FROM original_table """ % table_name)

* No soy un experto en SQL-inyección, por lo que hacer una investigación si table_namese origina fuera de su aplicación.

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=414860&siteId=1
Recomendado
Clasificación