Python __init_;()正好接受一个参数MYSQL

Python __init_;()正好接受一个参数MYSQL,python,mysql,Python,Mysql,我知道有人问过同样标题的问题,但根据给出的解决方案,我无法找出问题所在。我正在使用argparser连接到数据库并获取数据。这里 import os import logging import argparse import mysql.connector def main(): parser = create_parser() args = parser.parse_args() query_result = get_name_and_id(args.user, ar

我知道有人问过同样标题的问题,但根据给出的解决方案,我无法找出问题所在。我正在使用argparser连接到数据库并获取数据。这里

import os
import logging
import argparse
import mysql.connector

def main():
    parser = create_parser()
    args = parser.parse_args()
    query_result = get_name_and_id(args.user, args.password, args.host, args.database)

def create_parser():
    parser = argparse.ArgumentParser(description="Require database credentials")
    parser.add_argument("--host", required="True", metavar="[host]", dest='host', help="Database host")
    parser.add_argument("--database-name", required="True", metavar="[database]", dest='database', help="Name of the database to connect to.")
    parser.add_argument("--user-name", metavar="[user]", dest='user', required="True")
    parser.add_argument("--password", required="True", metavar="[password]", dest='password')
    return parser

def get_name_and_id(user,password,host,database):
    con = mysql.connector.connect(user, password, host, database)
    cursor = con.cursor()
    query = ("SELECT id, name FROM some_table")
    cursor.execute(query)
    name_id_list = dict()
    for id, name in cursor:
        name_id_list[id] = name
   return name_id_list

if __name__ == "__main__":
    main()
要运行这个程序,我使用以下命令
python test\u database.py--host somehost--database somedb--user name myuser name--password my password

这是stacktrace:

文件“test_arg_parsing.py”,第59行,在 main()文件“test_arg_parsing.py”,第14行,main query_result=get_name_和_id(args.user、args.password、args.host、args.database)文件“test_arg_parsing.py”,第32行,在 获取\u排队器\u数据 con=mysql.connector.connect(用户、密码、主机、数据库)文件“/Library/Python/2.7/site packages/mysql/connector/init.py”, 第179行,连接中 返回MySQLConnection(*args,**kwargs)文件“/Library/Python/2.7/site packages/mysql/connector/connection.py”, 第57行,在init super(MySQLConnection,self)。init(*args,**kwargs)类型错误:init()正好接受1个参数(给定5个)


我不明白的是,它是否在抱怨MySQLConnectioninit函数?还是我运行的命令不对?我已经使用mysql连接器成功连接到同一个数据库。但我现在想将凭据作为参数传递。这里出了什么问题?

这些必须是关键字参数。尝试:

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

这些必须是关键字参数。尝试:

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

首先,
get\u name\u和\u id
函数应该接受连接参数:

def get_name_and_id(user, password, host, database):
def get_name_and_id(**kwargs):
    con = mysql.connector.connect(**kwargs)
    # ...
然后,根据,您需要指定关键字参数:

def get_name_and_id(user, password, host, database):
def get_name_and_id(**kwargs):
    con = mysql.connector.connect(**kwargs)
    # ...

或者,您可以只传递任意关键字参数:

def get_name_and_id(user, password, host, database):
def get_name_and_id(**kwargs):
    con = mysql.connector.connect(**kwargs)
    # ...
用法:

def main():
    parser = create_parser()
    args = parser.parse_args()
    query_result = get_name_and_id(user=args.user, 
                                   password=args.password, 
                                   host=args.host, 
                                   database=args.database)

首先,
get\u name\u和\u id
函数应该接受连接参数:

def get_name_and_id(user, password, host, database):
def get_name_and_id(**kwargs):
    con = mysql.connector.connect(**kwargs)
    # ...
然后,根据,您需要指定关键字参数:

def get_name_and_id(user, password, host, database):
def get_name_and_id(**kwargs):
    con = mysql.connector.connect(**kwargs)
    # ...

或者,您可以只传递任意关键字参数:

def get_name_and_id(user, password, host, database):
def get_name_and_id(**kwargs):
    con = mysql.connector.connect(**kwargs)
    # ...
用法:

def main():
    parser = create_parser()
    args = parser.parse_args()
    query_result = get_name_and_id(user=args.user, 
                                   password=args.password, 
                                   host=args.host, 
                                   database=args.database)

糟糕的是,我在发布问题时错过了函数的参数。我会更新的,真不敢相信我这么粗心。谢谢alexce@user3527975事实上,我发现这个mysql连接器的连接函数行为令人困惑-为什么他们只使用关键字参数…谢谢。在第二个选项中,您使用的是args.user,args.password。Args是main方法的本地参数。糟糕的是,我在发布问题时错过了函数的参数。我会更新的,真不敢相信我这么粗心。谢谢alexce@user3527975事实上,我发现这个mysql连接器的连接函数行为令人困惑-为什么他们只使用关键字参数…谢谢。在第二个选项中,您使用的是args.user,args.password。Args是本地的主要方法。是的。这就是我错过的。谢谢,是的。这就是我错过的。谢谢