создайте таблицу внутри существующей базы данных. но пользователь выбирает имя базы данных, используя входную переменную

#mysql #python-3.x #xampp

Вопрос:

Я пытаюсь подключиться к базе данных и создать таблицу на основе ввода пользователя, но я получаю эту ошибку: TypeError: __init__() takes 1 positional argument but 6 were given

Вот мой код:

 import mysql.connector

def add_tb():
    host='localhost'
    port='3306'
    user='root'
    password=''
    database =input('type the database name you want to add the table inside of it: ')
    
    mydb = mysql.connector.connect(host, port, user, password, database)
    mycursor = mydb.cursor()

    tablename=input('what the name of table u want to create ?:')
    mycursor.execute(f'create table {tablename} (name varchar (200), kelas int (4))') 

add_tb()
 

Но я получаю эту ошибку:

 Traceback (most recent call last):
  File "c:UsersNBUSERDocumentsARTOFWARPITON2-pitonALDOBOTbuattabel.py", line 18, in <module>
    add_tb()
  File "c:UsersNBUSERDocumentsARTOFWARPITON2-pitonALDOBOTbuattabel.py", line 13, in add_tb
    mydb = mysql.connector.connect(host, port, user, password, database)
  File "C:UsersNBUSERAppDataLocalProgramsPythonPython39libsite-packagesmysqlconnector__init__.py", line 273, in connect
    return MySQLConnection(*args, **kwargs)
PS C:UsersNBUSERDocumentsARTOFWARPITON2-piton> amp; C:/Users/NBUSER/AppData/Local/Programs/Python/Python39/python.exe c:/Users/NBUSER/Documents/ARTOFWAR/PITON/02-piton/ALDOBOT/buattabel.py
type database you wanttest123
Traceback (most recent call last):
  File "c:UsersNBUSERDocumentsARTOFWARPITON2-pitonALDOBOTbuattabel.py", line 18, in <module>
    add_tb()
  File "c:UsersNBUSERDocumentsARTOFWARPITON2-pitonALDOBOTbuattabel.py", line 13, in add_tb
    mydb = mysql.connector.connect(host, port, user, password, database)
  File "C:UsersNBUSERAppDataLocalProgramsPythonPython39libsite-packagesmysqlconnector__init__.py", line 273, in connect
    return MySQLConnection(*args, **kwargs)
  File "C:UsersNBUSERAppDataLocalProgramsPythonPython39libsite-packagesmysqlconnectorconnection.py", line 72, in __init__
TypeError: __init__() takes 1 positional argument but 6 were given
PS C:UsersNBUSERDocumentsARTOFWARPITON2-piton> amp; C:/Users/NBUSER/AppData/Local/Programs/Python/Python39/python.exe c:/Users/NBUSER/Documents/ARTOFWAR/PITON/02-piton/ALDOBOT/buattabel.py
type the database name you want to add the table inside of it: test123
Traceback (most recent call last):
  File "c:UsersNBUSERDocumentsARTOFWARPITON2-pitonALDOBOTbuattabel.py", line 16, in <module>
    add_tb()
  File "c:UsersNBUSERDocumentsARTOFWARPITON2-pitonALDOBOTbuattabel.py", line 10, in add_tb
    mydb = mysql.connector.connect(host, port, user, password, database)
  File "C:UsersNBUSERAppDataLocalProgramsPythonPython39libsite-packagesmysqlconnector__init__.py", line 273, in connect
    return MySQLConnection(*args, **kwargs)
  File "C:UsersNBUSERAppDataLocalProgramsPythonPython39libsite-packagesmysqlconnectorconnection.py", line 72, in __init__
    super(MySQLConnection, self).__init__(*args, **kwargs)
TypeError: __init__() takes 1 positional argument but 6 were given
 

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

1. с какой проблемой вы столкнулись?

2. в принципе это разрешено, но сверяет имя базы данных с именем таблицы

3. я уже сообщаю о проблеме, с которой я столкнулся, на самом деле я хочу: когда пользователь пытается создать таблицу в базе данных, но до того, как пользователь сможет это сделать. они должны ввести или указать базовое имя базы данных. вот почему я пытаюсь сделать так, чтобы база данных стала переменным входом.

Ответ №1:

ошибка, которую вы получаете, заключается в том, что mysql.connector.connect() использует **kwargs для того, чтобы иметь возможность принимать произвольное количество аргументов ключевого слова («kwargs» означает «аргументы ключевого слова»), поэтому он не принимает аргументы в определенном порядке.

Он должен быть предоставлен в key=value формате pair.

Вот как вам нужно это использовать:

 mydb = mysql.connector.connect(host=host, port=port, user=user, password=password, database=database)
 

смотрите больше имен аргументов здесь

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

1. ну, это работа ..!! большое вам спасибо. я получил то, чего хочу достичь.. очень полезно ..!!