__init __()只需要一个参数MYSQL

时间:2016-02-24 23:51:03

标签: 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, 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_database.py --host somehost --database somedb --user-name myuser-name --password my password

这是堆栈跟踪:

  

文件“test_arg_parsing.py”,第59行,in   main()文件“test_arg_parsing.py”,第14行,在main中   query_result = get_name_and_id(args.user,args.password,args.host,args.database)文件“test_arg_parsing.py”,第32行,in   get_enqueuer_data       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)TypeError: init ()只取1个参数(给定5个)

我在这里不明白的是它是否抱怨MySQLConnection init 功能?或者我没有运行正确的命令?我已经使用mysql连接器成功连接到同一个数据库。但是我想现在将凭证作为参数传递。这里出了什么问题?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

首先,get_name_and_id函数应该接受连接参数:

def get_name_and_id(user, password, host, database):

然后,根据connect() function definition,您需要指定关键字参数

def get_name_and_id(user, password, host, database):
    con = mysql.connector.connect(user=user, password=password, host=host, database=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)